正则表达式有助于从字符串中提取值

时间:2012-05-09 21:55:26

标签: c# regex

我无法弄清楚如何使用字符串中的特定匹配来提取特定数字。

示例:

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

3 个答案:

答案 0 :(得分:4)

使用Matches代替Match

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

查看在线工作:ideone

答案 1 :(得分: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);

我更喜欢后者中的一个

答案 2 :(得分: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”。

感谢您的帮助!