我一直在玩正在使用正则表达式从字符串检索数据,主要是作为我自己的练习。我试图要匹配的模式看起来像这样:C#正则表达式,检索用逗号分隔的两个单词,括号运算符
"(SomeWord,OtherWord)"
阅读一些文件,看着我得出的结论备忘单之后,下面的正则表达式应该给我2场比赛:
"\((\w),(\w)\)"
由于根据文档括号应执行以下操作:
(模式)与模式匹配和记住匹配。匹配的 子串可以使用Item [0] ... [n]从结果匹配集合 中检索。要匹配括号字符(),请使用“\(”或 “\)”。
但是使用下面的代码(删除错误检查简洁)匹配非常不同的东西:
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”的权利。然而,左变成了“(A,B)”,并且根本没有第二次比赛。我在这里错过了什么?
(我知道这个例子很简单没有正则表达式,但要学会如何正确地使用正则表达式我应该可以做一些简单的,因为这解决工作)
嘿pstrjds,这的确做到了,我会接受在几分钟内你的答案!由于文档明确地谈论了匹配项目,所以我没有想到看看组。谢谢你的帮助! –
对。 MatchCollection是针对模式的匹配集合,而不是模式中标识的字符串集合。如果输入是“'(A,B)blah(C,D)'”,则在MatchCollection中会有两个匹配 - 一个用于“(A,B)”,另一个用于“ ,D)'',与'matches [0] .Groups [1] .Value ==“A”','matches [0] .Groups [2] .Value ==“B”','matches [1] .Groups [1] .Value ==“C”',和'matches [1] .Groups [2] .Value ==“C”'。 'Groups [0]'总是包含匹配的整个字符串:'matches [0] .Groups [0] .Value ==“(A,B)”'和'matches [1] .Groups [0] .Value ==“(C,D)”'。 –