2010-03-04 73 views
3

您能否擴充爲什麼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]); 

回答

2

我不familar與組

的概念A組是正則表達式的一部分,而這樣做的匹配被保存。要在正則表達式中聲明一個組,可以在括號之間放置一部分表達式。然後這部分被保存在一個組中。

組從左到右,從外部到內部編號(儘管也可以給出明確的名稱)。 「零」組是整個比賽。

在你的情況下,你打印第一個組,這只是字符串的最後一部分,即在「Company Name:」之後的所有內容,直到行尾。

+0

你能詳細說明這個例子的匹配步驟嗎?謝謝。 – Ricky

+1

我們看到「公司名稱」,然後我們將所有其他符號捕獲到組號1中,因爲「。* $」匹配所有其他符號。 – wRAR

1

該文檔包含所有有關組的信息的概念,但我認爲,每次在模式中使用括號的時候,你創建一個匹配的組。組[0]是由模式匹配的文本,組[i](其中i> 0)表示括號中的第n個匹配模式。 你也可以命名組。

1

組由一組括號表示。基本上你的正則表達式是說:爲了匹配,任何傳入的字符串必須以Company Name:開頭,並且字符串的其餘部分可以是任何字符,即.*,包括字符串的末尾$。由於.*$位於括號內,因此您表示想要對該匹配進行分組。請記住,你可以有更多的團體。整個輸入字符串總是Groups[0](如果它匹配的話),這就是爲什麼你的表達式(.*$)Groups[1]

1

我正在學習正則表達式,現在,所以這是我的一些好的做法:)

您使用正則表達式是「公司名稱:(。* $)」並使用RegExOptions .SingleLine匹配你的字符串(這是默認選項)。

「公司名稱:」會從任何地方在字符串中開始(如果你要使用「^公司名稱:」匹配你會說,「公司名稱:」必須是。字符串的第一部分(^ =字符串的beginnig)

(.*$)這是一個未命名的基團

這裏面組你正在匹配爲".*$",即轉化爲:任何字符".",採取0以上次"*",直到字符串結尾"$"

清除?:)

+2

'(?。* $)'是一個無效的表達式。 –

+0

你說得對 - 我刪除了關於(?。* $)的評論 – Ando