【问题标题】:How to remove numbers from string using Regex.Replace?如何使用 Regex.Replace 从字符串中删除数字?
【发布时间】:2010-12-12 01:15:46
【问题描述】:

我需要使用Regex.Replace 删除字符串中的所有数字和符号。

示例输入:123- abcd33
示例输出:abcd

【问题讨论】:

  • 您还想删除“-”吗?这些不是数字...

标签: c# regex


【解决方案1】:

尝试以下方法:

var output = Regex.Replace(input, @"[\d-]", string.Empty);

\d 标识符只匹配任何数字字符。

【讨论】:

    【解决方案2】:

    您可以使用类似 LINQ 的解决方案而不是正则表达式来做到这一点:

    string input = "123- abcd33";
    string chars = new String(input.Where(c => c != '-' && (c < '0' || c > '9')).ToArray());
    

    快速性能测试表明,这比使用正则表达式快大约五倍。

    【讨论】:

    • @SirDemon:是的,LINQ 通常不是最快的选择,但是正则表达式的初始开销更大。对于短字符串的操作,设置 RegEx 对象需要比实际工作更长的时间。
    • @Guffa 你知道这是如何扩展的吗?假设有 50k 条记录,我应该使用 RegEx 吗?
    • @ArnoldWiersma:两者都应该可以很好地扩展,它们基本上都是线性的,所以没有令人讨厌的惊喜。我无法判断哪个会更快,您必须对其进行测试。
    • 或者new string(text.Where(char.IsLetter).ToArray());
    • @SkorunkaFrantišek,这里的问题是这也会修剪字符串
    【解决方案3】:

    Blow 代码可以帮助您...

    获取号码:

    return string.Concat(input.Where(char.IsNumber));
    

    获取字母:

    return string.Concat(input.Where(char.IsLetter));
    

    【讨论】:

      【解决方案4】:
      var result = Regex.Replace("123- abcd33", @"[0-9\-]", string.Empty);
      

      【讨论】:

        【解决方案5】:

        作为字符串扩展:

            public static string RemoveIntegers(this string input)
            {
                return Regex.Replace(input, @"[\d-]", string.Empty);
            }
        

        用法:

        "My text 1232".RemoveIntegers(); // RETURNS "My text "
        

        【讨论】:

          【解决方案6】:

          最好的设计是:

          public static string RemoveIntegers(this string input)
              {
                  return Regex.Replace(input, @"[\d-]", string.Empty);
              }
          

          【讨论】:

            【解决方案7】:
            text= re.sub('[0-9\n]',' ',text)
            

            在python中安装正则表达式,然后执行以下代码。

            【讨论】:

              【解决方案8】:

              不同的方法,如果你有 100000 次迭代,哪种方法最快。

              代码:

                      Stopwatch sw = new Stopwatch();
                      var maxIterations = 100000;
              
                      Console.WriteLine(@"Removing digits from string: ""1mir1112211a3bc9"" with Total {0}x iterations ",maxIterations);
                      Console.WriteLine("\nReplace Operations");
                      sw.Start();
                      var str = "1mir1112211a3bc9";
                      for (int i = 1; i <= maxIterations; i++)
                      {
                          str = "1mir1112211a3bc9";
              
                          str = str.Replace("1", "")
                                   .Replace("2", "")
                                   .Replace("3", "")
                                   .Replace("4", "")
                                   .Replace("5", "")
                                   .Replace("6", "")
                                   .Replace("7", "")
                                   .Replace("8", "")
                                   .Replace("9", "")
                                   .Replace("0", "");
                      }
                      sw.Stop();
                      
                      Console.WriteLine("Finalstring: " + str);
                      Console.WriteLine("Elapsed time: " + sw.Elapsed.TotalMilliseconds + " Milliseconds");
              
                      sw.Reset();
              
                      //list for and if 
                      Console.WriteLine("\nList Operations:");
                      sw.Start();
                      var str2 = "1mir1112211a3bc9";
                      var listOfchars = new List<char>();
                      for (int i = 1; i <= maxIterations; i++)
                      {
                           str2 = "1mir1112211a3bc9";
                          for (int j = 0; j < str2.Length; j++)
                          {
                              if( !(char.IsDigit(str2[j])))
                                  listOfchars.Add(str2[j]);
                          }
                          str2 = new string(listOfchars.ToArray());
                          listOfchars.Clear();
                      }
                      sw.Stop();
                      Console.WriteLine("Finalstring: " + str2);
                      Console.WriteLine("Elapsed time: " + sw.Elapsed.TotalMilliseconds + " Milliseconds");
              
                         sw.Reset();
                      //LINQ
                      Console.WriteLine("\nLINQ Operations");
              
                      sw.Start();
                          var str1 = "1mir1112211a3bc9";
                      for (int i = 1; i <= maxIterations; i++)
                      {
                          str1 = "1mir1112211a3bc9";
                          str1 = String.Concat(str1.Where(c => c != '-' && (c < '0' || c > '9')) );
                      }
                      sw.Stop();
              
                      Console.WriteLine("Finalstring: " + str1);
                      Console.WriteLine("Elapsed time: " + sw.Elapsed.TotalMilliseconds + " Milliseconds");
              
                      //Regex
                      sw.Reset();
                      
                      Console.WriteLine("\nRegex Operations");
              
                      sw.Start();
                      var str3 = "1mir1112211a3bc9";
                      for (int i = 1; i <= maxIterations; i++)
                      {
                          str3 = "1mir1112211a3bc9";
                          str3 = Regex.Replace(str3, @"[\d-]", string.Empty);
                      }
                      sw.Stop();
              
                      Console.WriteLine("Finalstring: " + str3);
                      Console.WriteLine("Elapsed time: " + sw.Elapsed.TotalMilliseconds + " Milliseconds");
              

              结果如下:

              从字符串中删除数字:“1mir1112211a3bc9”,总共 100000 次迭代

              替换操作
              最终字符串:mirabc
              经过时间:37,8307 毫秒

              列表操作:
              最终字符串:mirabc
              经过的时间:16,7803 毫秒

              LINQ 操作
              最终字符串:mirabc
              经过时间:34,5803 毫秒

              正则表达式操作
              最终字符串:mirabc
              经过时间:252,1907 毫秒

              【讨论】:

              • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
              猜你喜欢
              • 2011-06-26
              • 1970-01-01
              • 2014-01-05
              • 1970-01-01
              • 1970-01-01
              • 2019-12-04
              • 1970-01-01
              相关资源
              最近更新 更多