如何使用 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 从字符串中删除数字?的主要内容,如果未能解决你的问题,请参考以下文章