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,我们需要将替换模式作为第二个参数传递.