新手正则表达式问题/ 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"
答案 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)
。
尝试使用它!