【发布时间】:2010-12-12 01:15:46
【问题描述】:
我需要使用Regex.Replace 删除字符串中的所有数字和符号。
示例输入:123- abcd33
示例输出:abcd
【问题讨论】:
-
您还想删除“-”吗?这些不是数字...
我需要使用Regex.Replace 删除字符串中的所有数字和符号。
示例输入:123- abcd33
示例输出:abcd
【问题讨论】:
尝试以下方法:
var output = Regex.Replace(input, @"[\d-]", string.Empty);
\d 标识符只匹配任何数字字符。
【讨论】:
您可以使用类似 LINQ 的解决方案而不是正则表达式来做到这一点:
string input = "123- abcd33";
string chars = new String(input.Where(c => c != '-' && (c < '0' || c > '9')).ToArray());
快速性能测试表明,这比使用正则表达式快大约五倍。
【讨论】:
new string(text.Where(char.IsLetter).ToArray());
Blow 代码可以帮助您...
获取号码:
return string.Concat(input.Where(char.IsNumber));
获取字母:
return string.Concat(input.Where(char.IsLetter));
【讨论】:
var result = Regex.Replace("123- abcd33", @"[0-9\-]", string.Empty);
【讨论】:
作为字符串扩展:
public static string RemoveIntegers(this string input)
{
return Regex.Replace(input, @"[\d-]", string.Empty);
}
用法:
"My text 1232".RemoveIntegers(); // RETURNS "My text "
【讨论】:
最好的设计是:
public static string RemoveIntegers(this string input)
{
return Regex.Replace(input, @"[\d-]", string.Empty);
}
【讨论】:
text= re.sub('[0-9\n]',' ',text)
在python中安装正则表达式,然后执行以下代码。
【讨论】:
不同的方法,如果你有 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 毫秒
【讨论】: