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

4

3 回答 3

4

使用Matches而不是Match.

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

在线查看它:ideone

于 2012-05-09T21:57:38.420 回答
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);

我更喜欢后两者之一

于 2012-05-09T22:05:04.697 回答
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”。

谢谢你的帮助!

于 2012-05-09T22:19:39.067 回答