我正在尝试删除给定字符串末尾的数字。
AB123 -> AB
123ABC79 -> 123ABC
我尝试过这样的事情;
string input = "123ABC79";
string pattern = @"^\\d+|\\d+$";
string replacement = "";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
然而替换字符串与输入相同。我对正则表达式不太熟悉。 我可以简单地将字符串拆分成一个字符数组,并在其上循环以完成它,但它不是一个好的解决方案。删除仅在字符串末尾的数字有什么好的做法?
提前致谢。
答案 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
,我们需要将替换模式作为第二个参数传递。
答案 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*
应解析它