您能否扩展为什么Console.WriteLine(m.Groups[1]);
的输出为Contoso, Inc
?
你还能详细说明这个例子的匹配步骤吗?感谢。
PS:我不熟悉群组的概念
string input = "Company Name: Contoso, Inc.";
Match m = Regex.Match(input, @"Company Name: (.*$)");
Console.WriteLine(m.Groups[1]);
答案 0 :(得分:2)
我不熟悉群体的概念
组是执行匹配时保存的正则表达式的一部分。要在正则表达式中声明一个组,可以将表达式的一部分放在括号中。然后将该部分保存在一个组中。
组从左到右,从外到内编号(尽管它们也可以给出明确的名称)。 “零”组是整场比赛。
在您的情况下,您打印第一个组,它只是字符串的最后一部分,即“Company Name:
”后面的所有内容,直到该行结束。
答案 1 :(得分:1)
文档包含有关组的所有信息,但我认为每次在模式中使用括号时,都会创建一个匹配组。组[0]是由模式匹配的文本,组[i](其中i> 0)表示括号中的第n个匹配模式。 您也可以为群组命名。
答案 2 :(得分:1)
组由一组括号表示。基本上你的正则表达式是:为了匹配,任何传入的字符串都必须以Company Name:
开头,字符串的其余部分可以是任何字符,.*
,包括字符串的结尾,{ {1}}。由于$
在括号中,您已经说过要对该匹配进行分组。请记住,您可以拥有更多群组。整个输入字符串始终为.*$
(如果匹配),这就是您的表达式Groups[0]
位于(.*$)
中的原因。
答案 3 :(得分:1)
我正在研究正则表达式,所以这对我来说是一个很好的练习:)
您使用的正则表达式是“公司名称:(。* $)”,您使用RegExOptions.SingleLine来匹配您的字符串(这是默认选项)。
“公司名称:”将从字符串中的任何位置开始匹配(如果您使用“^公司名称:”您会说“公司名称:”必须是字符串的第一部分。(^ =字符串的beginnig)
(.*$)
这是一个未命名的群组。
在此群组中,您匹配".*$"
,其转换为:任意字符"."
,花费0次或更多次"*"
,直到字符串"$"
结束
清除? :)
答案 4 :(得分:1)
如果您有兴趣了解正则表达式的细节(以及基于语言和平台的不同实现方式的不同),那么我绝对推荐Mastering Regular Expressions from O'Reilly。