如何使用正则表达式从字符串中删除数字。替换?

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

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

152942 次浏览

Try the following:

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

The \d identifier simply matches any digit character.

var result = Regex.Replace("123- abcd33", @"[0-9\-]", string.Empty);

You can do it with a LINQ like solution instead of a regular expression:

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

A quick performance test shows that this is about five times faster than using a regular expression.

As a string extension:

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

Usage:

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

the best design is:

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

Blow codes could help you...

Fetch Numbers:

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

Fetch Letters:

return string.Concat(input.Where(char.IsLetter));
text= re.sub('[0-9\n]',' ',text)

install regex in python which is re then do the following code.

Different methods and which is the fastest if you have 100000 iterations to do.

Code:

        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");

Here are the Results:

Removing digits from string: "1mir1112211a3bc9" with Total 100000x iterations

Replace Operations
Finalstring: mirabc
Elapsed time: 37,8307 Milliseconds

List Operations:
Finalstring: mirabc
Elapsed time: 16,7803 Milliseconds

LINQ Operations
Finalstring: mirabc
Elapsed time: 34,5803 Milliseconds

Regex Operations
Finalstring: mirabc
Elapsed time: 252,1907 Milliseconds