从字符串中提取所有数字

时间:2018-09-30 19:11:46

标签: c# regex numbers

假设我有一个字符串,例如123ad456。我想制作一种将数字组分隔为列表的方法,这样输出的内容将类似于123,456

我尝试做return Regex.Match(str, @"-?\d+").Value;,但是只输出第一个出现的数字,所以输出将是123。我也知道我可以使用Regex.Matches,但是据我所知,它将输出123456,而不是分开不同的数字组。

我还从MSDN的this页中看到,Regex.Match有一个重载,该重载需要string查找匹配项,而int作为索引搜索匹配项,但除了用于搜索正则表达式模式的参数外,没有看到上面的重载,Regex.Matches也是如此。

我猜想使用的方法是使用某种for循环,但是我不确定要怎么做。帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

您只需要使用Matches而不是Match。然后简单地遍历所有匹配项:

string result = "";
foreach (Match match in Regex.Matches(str, @"-?\d+"))
{
    result += match.result;
}

答案 1 :(得分:1)

您可以使用foreach遍历字符串数据,并使用TryParse检查每个字符。

foreach (var item in stringData)
{
    if (int.TryParse(item.ToString(), out int data))
    {
        // int data is contained in variable data
    }
}

答案 2 :(得分:0)

使用string.JoinRegex.Matches的组合:

string result = string.Join(",", Regex.Matches(str, @"-?\d+").Select(m => m.Value));

string.Join比连续追加到现有字符串的性能更好。

答案 3 :(得分:-1)

\ d +是整数的正则表达式;

// System.Text.RegularExpressions.Regex resultString = Regex.Match(subjectString,@“ \ d +”)。Value; 返回一个字符串,该字符串的第一个出现在subjectString中。

Int32.Parse(resultString)然后会给您编号。