我有一句话:
“这只是一个例子”
我需要在第一个''字符之间剪切。
到目前为止,我正在使用以下Regex方法:
string name_only = Regex.Match("This 'is' just an example", @"\'([^)]*)\'").Groups[1].Value;
结果:是
它工作得非常好,直到另一个'出现:
“这'只是一个例子”
现在我得到了:
结果:只是一个e
如何解决这个问题(除了使用“for”循环迭代并找到前两个字符'然后使用子字符串切割单词)?
答案 0 :(得分:2)
问题在于你的正则表达式是以贪婪的方式行事,如果你把它改成以下它会起作用:
@"\'([^)]*?)\'"
答案 1 :(得分:1)
默认情况下,正则表达式遵循“最左边最长的规则”:匹配最左边,最长的子字符串。
我倾向于使正则表达式更具体地说明它应该匹配的内容,因此:
'(([^']|(''))*)'
那应该匹配:
$ 0然后为您提供整个匹配,$ 1为匹配报价值的内容,不包括引入/引出报价。
答案 2 :(得分:0)
http://msdn.microsoft.com/en-us/library/3206d374.aspx#Greedy
贪婪和懒惰的量词
许多量词有两个版本:
贪婪的版本。
贪婪的量词试图尽可能多地匹配一个元素。
- ,就可以将贪婪的量词变成一个懒惰的量词 醇>
非贪婪(或懒惰)版本。
非贪婪量词尝试尽可能少地匹配元素。只需添加一个?。