C# 正则表达式,检索由逗号、括号运算符分隔的两个单词

标签 c# regex

我一直在尝试使用正则表达式从字符串中检索数据,主要是作为我自己的练习。我尝试匹配的模式如下所示:

"(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/

相关文章:

c# - Linq 聚合累积的 bool 值

c# - 如何使用 OpenXML C# 在 PowerPoint 中插入新的 SmartArt

正则表达式查找匹配字符的行中首次出现的字符

javascript - 查询字符串参数

c# - 如果给定短路径,应用程序无法从应用程序配置中读取

javascript - RegEx 捕获尖括号(或管道)之间的 URL

c++ - std::regex,匹配字符串的开始/结束

javascript - 日本数字正则表达式

regex - 使用 sed 或 grep 提取

c# - 使用正则表达式匹配多个模式