我有一个代表"帐号"的字段,大多数情况下只是一个数字.我需要对这些"数字"进行一些自动递增.显然不适合做数学.我们决定为我们工作的规则是,我们希望找到最右边的数字组,并将它们自动递增一个并返回重建的字符串(即使这使得它更长一个字符).
这些数字的一些例子是:
我正在使用C#/ .NET 4.0.我将Regex列为标签,但这不是必需的.此解决方案不必是正则表达式.
有什么好想法吗?理想的性能不是主要问题.除非它全部包含在正则表达式中,否则我宁愿拥有清晰易懂的代码.
谢谢!
var src = "ap45245jpb1234h";
var match = Regex.Match(src, @"(?<=(\D|^))\d+(?=\D*$)");
if(match.Success)
{
var number = int.Parse(match.Value) + 1;
var newNum=string.Format(
"{0}{1}{2}",
src.Substring(0,match.Index),
number,
src.Substring(match.Index + match.Length));
newNum.Dump(); //ap45245jpb1235h
}
Run Code Online (Sandbox Code Playgroud)
解释正则表达式:从(字符串的开头)或(非数字)开始,匹配一个或多个数字,后跟零个或多个非数字,然后是字符串的结尾.
当然,如果提取的数字具有前导零,那么事情就会出错.我会将此作为练习留给读者.
使用MatchEvaluator(由@LB在他/她的回答中建议),这变得更轻:
Regex.Replace(
src,
@"(?<=(\D|^))\d+(?=\D*$)",
m => (int.Parse(m.Value)+1).ToString())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |