这个正则表达式如何提取公司名称?

时间:2010-03-04 09:57:53

标签: .net regex

您能否扩展为什么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]);

5 个答案:

答案 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