【问题标题】:Best way to get all digits from a string [duplicate]从字符串中获取所有数字的最佳方法[重复]
【发布时间】:2011-02-07 17:58:56
【问题描述】:

有没有比这样做更好的方法来获取诸如“(123)455-2344”之类的字符串并从中获取“1234552344”:

var matches = Regex.Matches(input, @"[0-9]+", RegexOptions.Compiled);

return String.Join(string.Empty, matches.Cast<Match>()
                                .Select(x => x.Value).ToArray());

也许一个正则表达式模式可以在一次匹配中完成?不过,我似乎无法创建一个来实现这一目标。

【问题讨论】:

    标签: c# regex text-parsing


    【解决方案1】:

    您需要使用正则表达式吗?

    return new String(input.Where(Char.IsDigit).ToArray());
    

    【讨论】:

    • +1,好主意。不过,您在 where 中遗漏了一些 lambda。 .Where(c =&gt; Char.IsDigit(c))
    • 没有考虑从 char 级别接近这个。
    • @Anthony 不,我的语法工作正常,并且比扩展版本更“嘈杂”。
    • 哦,有趣。我没有这样尝试过。
    • 支持“你需要使用正则表达式吗”:D
    【解决方案2】:

    你有反对Replace的东西吗?

    return Regex.Replace(input, @"[^0-9]+", "");
    

    【讨论】:

      【解决方案3】:

      您需要将/\D/(非数字)替换为''(空字符串)

      Regex r = new Regex(@"\D");
      string s = Regex.Replace("(123) 455-2344", r, "");
      

      或者更简洁:

      string s = Regex.Replace("(123) 455-2344", @"\D",""); //return only numbers from string
      

      【讨论】:

      • 我喜欢这个答案。但是,在这个答案和接受的答案之间,除了一个使用正则表达式而另一个没有之外,是否存在显着差异?
      【解决方案4】:

      只需删除所有非数字:

      var result = Regex.Replace(input, @"\D", "");
      

      【讨论】:

        【解决方案5】:

        在 perl 中(您可以将其改编为 C#)只需这样做

        $str =~ s/[^0-9]//g; 
        

        我假设你的字符串在 $str 中。基本思想是用''(即空字符串)替换所有非数字

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-25
          • 1970-01-01
          • 1970-01-01
          • 2013-09-18
          • 2023-03-06
          • 2015-08-21
          • 2011-11-21
          • 1970-01-01
          相关资源
          最近更新 更多