【问题标题】:Extract all numbers from string从字符串中提取所有数字
【发布时间】:2018-09-30 19:11:45
【问题描述】:

假设我有一个字符串,例如123ad456。我想创建一个将数字组分隔成列表的方法,因此输出将类似于123,456

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

我还从 MSDN 上的 this 页面看到 Regex.Match 有一个重载,它需要 string 来查找匹配项和 int 作为搜索匹配项的索引,但我没有'除了要搜索的正则表达式模式的参数外,还没有看到包含上述内容的重载,Regex.Matches 也是如此。

我想使用的方法是使用某种for 循环,但我不完全确定该怎么做。非常感谢您的帮助。

【问题讨论】:

标签: c# regex numbers


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      使用string.JoinRegex.Matches 的组合:

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

      string.Join 的性能比不断追加到现有字符串要好。

      【讨论】:

        【解决方案4】:

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

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

        Int32.Parse(resultString) 然后会给你数字。

        【讨论】:

        • 该问题专门要求所有匹配项,而不仅仅是第一个匹配项。获取所有匹配项是问题的重点,而您的答案根本没有解决这个问题。
        • 另外,您没有处理签名号码。
        猜你喜欢
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        相关资源
        最近更新 更多