简单的正则表达式问题/多个匹配

时间:2011-03-21 16:13:43

标签: c# regex

新手正则表达式问题/ C#:

考虑(。*)=(。*)以及它如何匹配“A = B = C”

由于有两种方法可以分组和匹配,因此我决定重新获得两个匹配对象:

(A = B) = (C)   

     or 

(A) = (B = C)

但是我只返回一个匹配对象(第一种情况)。所以我想我不明白为什么匹配集合是一个集合 - 因为我似乎无法获得多个项目。有人可以解释一下吗?


fyi - 对于上面的测试,我刚刚使用了immed窗口:

?Regex.Matches("A = B = C", "(.*)=(.*)").Count
 1

?Regex.Matches("A = B = C", "(.*)=(.*)")[0].Groups[1].Captures[0]
 Value: "A = B"

?Regex.Matches("A = B = C", "(.*)=(.*)")[0].Groups[1].Captures[1]
 Value: "C"

5 个答案:

答案 0 :(得分:3)

Matches返回的集合包含连续匹配,而不是字符串相同部分的替代匹配。因此,如果你传入一个像“A = B \ nC = D”这样的字符串,你将得到两个匹配:一个用于“A = B”,一个用于“C = D”(因为.没有匹配换行符。)

答案 1 :(得分:2)

.*通常是贪婪的。这意味着它在满足表达式的同时匹配尽可能多的字符。因此,第一个.*匹配“A = B”,第二个.*保留“C”

您可以使用?更改行为?表达之后。在满足表达式的同时,.*?将匹配尽可能少的字符。

答案 2 :(得分:2)

正则表达式以这样的方式工作:当找到匹配时,已经匹配的输入部分从那时起被忽略。因此,当A = B匹配时,输入的那部分将不再受到任何匹配。

答案 3 :(得分:0)

它不起作用....

如果您的输入文字是:

"A = B = C\r\nW = X = Z"

你的表情是

"([^=]?) = ([^=]?) = ([^=]?)"

然后你会得到多个结果。请阅读文档! :-D

答案 4 :(得分:0)

*量词是贪婪的。它使第一个表达式.*尽可能匹配多个字符,因此,表达式将始终匹配(A = B) = (C).

使用非贪心量词*?将匹配(A) = (B = C)

尝试使用它!