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

时间:2014-12-04 08:08:54

标签: c# regex string substring

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

AB123 -> AB
123ABC79 -> 123ABC

我尝试过这样的事情;

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

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

提前致谢。

5 个答案:

答案 0 :(得分:28)

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

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

基准应用:

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

结果:

regex:  40052843
trim:   2000635

答案 1 :(得分:12)

试试这个:

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

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

Demo

答案 2 :(得分:2)

试试这个:

string input = "123ABC79";
string pattern = @".+\D+(?=\d+)";
Match match = Regex.Match(input, pattern);
string result = match.Value;

但你也可以使用一个简单的循环:

string input = "123ABC79";
int i = input.Length - 1;
for (; i > 0 && char.IsDigit(input[i - 1]); i--)
{}
string result = input.Remove(i);

答案 3 :(得分:1)

你可以用这个:

string strInput = textBox1.Text;
textBox2.Text = strInput.TrimEnd(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' });

我从这篇文章中得到了它: Simple get string (ignore numbers at end) in C#

答案 4 :(得分:0)

 (? <=[A-Za-z]*)\d*

应解析它