删除字符串末尾的数字C#

tdg*_*gdr 11 c# regex string substring

我正在尝试删除给定字符串末尾的数字.

AB123 -> AB
123ABC79 -> 123ABC
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情;

string input = "123ABC79";
string pattern = @"^\\d+|\\d+$";
string replacement = "";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Run Code Online (Sandbox Code Playgroud)

然而替换字符串与输入相同.我对正则表达式不太熟悉.我可以简单地将字符串拆分成一个字符数组,并在其上循环以完成它,但它不是一个好的解决方案.删除仅在字符串末尾的数字有什么好的做法?

提前致谢.

小智 30

String.TrimEnd()比使用正则表达式更快:

var digits = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
var input = "123ABC79";
var result = input.TrimEnd(digits);
Run Code Online (Sandbox Code Playgroud)

基准应用:

    string input = "123ABC79";
    string pattern = @"\d+$";
    string replacement = "";
    Regex rgx = new Regex(pattern);

    var iterations = 1000000;
    var sw = Stopwatch.StartNew();
    for (int i = 0; i < iterations; i++)
    {
        rgx.Replace(input, replacement);
    }

    sw.Stop();
    Console.WriteLine("regex:\t{0}", sw.ElapsedTicks);

    var digits = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    sw.Restart();
    for (int i = 0; i < iterations; i++)
    {
        input.TrimEnd(digits);
    }

    sw.Stop();
    Console.WriteLine("trim:\t{0}", sw.ElapsedTicks);
Run Code Online (Sandbox Code Playgroud)

结果:

regex:  40052843
trim:   2000635
Run Code Online (Sandbox Code Playgroud)


shr*_*t18 12

试试这个:

string input = "123ABC79";
string pattern = @"\d+$";
string replacement = "";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Run Code Online (Sandbox Code Playgroud)

将$放在最后将限制搜索到最后的数字子串.然后,由于我们正在调用Regex.Replace,我们需要将替换模式作为第二个参数传递.

演示

  • 这可以在一行中完成: string result = Regex.Replace("123ABC79", @"\d+$", ""); (2认同)