我一直在尝试使用正则表达式从字符串中检索数据,主要是作为我自己的练习。我尝试匹配的模式如下所示:
"(SomeWord,OtherWord)"
在阅读了一些文档并查看了备忘单后,我得出的结论是以下正则表达式应该给我 2 个匹配项:
"\((\w),(\w)\)"
因为根据文档,括号应该执行以下操作:
(pattern) Matches pattern and remembers the match. The matched substring can be retrieved from the resulting Matches collection, using Item [0]...[n]. To match parentheses characters ( ), use "\ (" or "\ )".
但是,使用以下代码(为了简洁而删除了错误检查)会匹配完全不同的内容:
string line = "(A,B)";
string pattern = @"\((\w),(\w)\)";
MatchCollection matches = Regex.Matches(line, pattern);
string left = matches[0].Value;
string right = matches[1].Value;
现在我希望左边成为“A”,右边成为“B”。然而 left 变成了“(A,B)”并且根本没有第二个匹配。我在这里缺少什么?
(我知道这个例子在没有正则表达式的情况下很容易解决,但要学习如何正确使用正则表达式,我应该能够做一些简单的事情)
最佳答案
您想要 Groups第一场比赛的成员。在您的示例中,只有 1 个匹配项,即整个字符串。在组集合中,您将有 3 个项目。试试这个示例代码,左边应该是 A,右边应该是 B。如果您查看 group[0]
值,它将是整个字符串。
string line = "(A,B)";
string pattern = @"\((\w),(\w)\)";
MatchCollection matches = Regex.Matches(line, pattern);
GroupCollection groups = matches[0].Groups;
string left = groups[1].Value;
string right = groups[2].Value;
关于C# 正则表达式,检索由逗号、括号运算符分隔的两个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416657/