2012-05-09 42 views
2

我無法弄清楚如何從字符串中提取特定的匹配數字。正則表達式幫助從字符串中提取值

實施例:

string myString = "blah blah **[10]** blah **[20]** and some more blah **[30]**"; 
Regex myIDsReg = new Regex(@"\*\*\[(\d+)\]\*\*"); 

顯然,正則表達式是聲音。

Match myMatch = myIDsReg.Match(myString); 

產生「** [10] **」但沒有別的。

我無法弄清楚如何得到一個數組具有以下值:10,20,30

+0

請不要用「C#」等來標題。這就是標籤的用途。 –

回答

1

我會做這個

string myString = "blah blah **[10]** blah **[20]** and some more blah **[30]**"; 
Regex myIDsReg = new Regex(@"\*\*\[(\d+)\]\*\*"); 
string[] regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value).ToArray(); 

您可以選擇您想和哪個輸出

List<string> regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value).ToList(); 

IEnumerable<string> regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value); 

我更喜歡後者中的一個

+0

我不得不稍微修改它以按照我需要的方式工作。但這對我來說是最好的答案。謝謝。 –

4

使用Matches而不是Match

foreach (Match match in myIDsReg.Matches(myString)) 
{ 
    // etc... 
} 

看到它聯機工作:ideone

1

Trikks想出了最好的答案。我只是修改了一下,爲我工作最好。

string myString = "blah blah **[10]** blah **[20]** and some more blah **[30]**"; 
Regex myIDsReg = new Regex(@"\*\*\[(\d+)\]\*\*"); 
string[] regexResult = (from Match match in myIDsReg.Matches(myString) select match.Groups[1].Value).ToArray(); 

我基本上用「select match.Groups [1] .Value」替換了「select match.Value」。

感謝您的幫助!