如何使用 Regex.Replace 从字符串中删除数字?

Posted

技术标签:

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

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

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

【问题讨论】:

您还想删除“-”吗?这些不是数字... 【参考方案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 0x 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。

以上是关于如何使用 Regex.Replace 从字符串中删除数字?的主要内容,如果未能解决你的问题,请参考以下文章

Regex.Replace 中的 MatchEvaluator 如何工作?

执行 Regex.Replace() 时如何使用命名组

等效于 C++ 中的 Regex.Replace

我的 Regex.Replace 不起作用

C#Regex使用匹配值替换

Regex.Replace 替换空匹配