急求两个正则表达式

e263dotcom0 2014-03-25 12:13:32
1. 有一个字符串可能是
"英文单词 s" 或 "英文单词 m" 或 "英文单词 d" 或 "英文单词 ll" 或 "英文单词 s" 或 "英文单词 re" 把它变成
英文单词's 或 英文单词'm 或 英文单词'd 或 英文单词'll 或 英文单词's 或 英文单词're
去掉了两边的双引号,把英文单词和后边的字母中间的空格替换成'

举个例子
比如以前是“You re” 改成 You're
比如以前是 “What s” 改成 What's
比如以前是 “we ll” 改成 we'll


2. 一段字符串 <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xmlns:emo="http://www.w3.org/2009/10/emotionml" xml:lang="en-us">
提取出en-us,当然这个语言可能会变,会成为en-gb,fr-fr等,主要是匹配xml:lang=不会变
请帮忙这个正则如何写,绝对给分!谢谢

...全文
241 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
reker 2014-07-16
  • 打赏
  • 举报
回复
问题2是Cortana返回的TTS语音。楼主在研究什么?
youzelin 2014-03-31
  • 打赏
  • 举报
回复
哎,加个引号你就不会了吗?还无法实现,脑子动都不动。 (?<=\b[a-z]+\b)\s(?=\b(?:d|ll|m|re|s)\b) (?<=""\b[a-z]+\b)\s(?=\b(?:d|ll|m|re|s)\b"")
e263dotcom0 2014-03-25
  • 打赏
  • 举报
回复
我是楼主,楼上的,其实你还忘记了我的第一个题目中在what s和I m这两个还有个双引号,需要把双引号去掉,在在中间空格填补一个‘ "What s" => What's "You ll" => You'll "I m" => I'm 所以我估计一步无法实现吧
youzelin 2014-03-25
  • 打赏
  • 举报
回复

Regex regex = new Regex(@"(?<=\b[a-z]+\b)\s(?=\b(?:d|ll|m|re|s)\b)", RegexOptions.IgnoreCase);
Console.WriteLine(regex.Replace("I m the first VIP and you ll be VIP, too. So we re all VIPs. I d like to tell you what s up.", "'"));
regex = new Regex(@"\bxml:lang=(?<langCtry>""[^""]+""|'[^']+')", RegexOptions.IgnoreCase);
Console.WriteLine(regex.Replace("<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xmlns:mstts='http://www.w3.org/2001/mstts' xmlns:emo='http://www.w3.org/2009/10/emotionml' xml:lang='en-us'>", "--${langCtry}--"));

// 自己稍微组织一下,就可以了。
网络菜鸟00 2014-03-25
  • 打赏
  • 举报
回复
引用 4 楼 UR_Not_Alone 的回复:
[quote=引用 3 楼 vbload 的回复:] 第一个:([a-zA-z]+[\s{1,}][re|s|ll|d|m]+) 测试为true时,则替换,否则不替换。
你的这种写法不严谨,我后面跟r或者l也能匹配成功[/quote] 的确如此,再改下试试:([a-zA-z]+[\s{1,}](re|s|ll|d|m)$) 应该能满足LZ所列的几种情况。
CqCoder 2014-03-25
  • 打赏
  • 举报
回复
1、 Regex.Replace("You re", @"\s", "'"); 2、 str="<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"http://www.w3.org/2001/mstts\" xmlns:emo=\"http://www.w3.org/2009/10/emotionml\" xml:lang=\"en-us\">"; all = Regex.Matches(str, "xml:lang=[\"\'][\\w\\W]*[\"\']"); foreach (Match item in all) { Console.WriteLine(item.Value); }
夜轻风 2014-03-25
  • 打赏
  • 举报
回复
引用 3 楼 vbload 的回复:
第一个:([a-zA-z]+[\s{1,}][re|s|ll|d|m]+) 测试为true时,则替换,否则不替换。
你的这种写法不严谨,我后面跟r或者l也能匹配成功
网络菜鸟00 2014-03-25
  • 打赏
  • 举报
回复
第一个:([a-zA-z]+[\s{1,}][re|s|ll|d|m]+) 测试为true时,则替换,否则不替换。
夜轻风 2014-03-25
  • 打赏
  • 举报
回复
第一个感觉不大适合用正则,变化太多,你想想用其他办法 第二个
            Regex reg = new Regex(@"(?<=xml:lang=)(['""]?)(?<lan>[^'""]+)\1");
            Console.WriteLine(reg.Match(str).Groups["lan"].Value);
zhang1struts1yun 2014-03-25
  • 打赏
  • 举报
回复
我给你写个js 版的,不用正则 string s = 'You re' s.replace(' ','\''); string ss = '<speak .....' ss.substring(s.indexof('xml:lang')+1,ss.length);

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧