我有一个AlphaNumeric值,可能包含空格或得分不足。 我想从中拆分数字并将值递增1,并且需要将数字部分连接回Alpha部分。
例如,Alpha数字可以是:1- BA 123或2. BA_123
我使用了Regex,如果字符串不包含任何空格或得分,则它可以正常工作。 以下是用于拆分和递增1的代码:
string StrInputNumber="BA123"
var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)");
var match = numAlpha.Match(StrInputNumber);
var alpha = match.Groups["Alpha"].Value;
int num = int.Parse(match.Groups["Numeric"].Value);
这仅适用于没有任何特殊字符的Alpha和数字
请指导解决此问题
答案 0 :(得分:3)
您只需要在您期望的位置添加这些字符。
string[] StrInputNumber = { "BA123", "BA_123", "BA 123", "Foo 1"};
foreach (String item in StrInputNumber) {
Console.Write(item + "\t==>\t");
var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*[ _]?)(?<Numeric>[0-9]*)");
var match = numAlpha.Match(item);
var alpha = match.Groups["Alpha"].Value;
int num = int.Parse(match.Groups["Numeric"].Value) + 1;
Console.WriteLine(alpha + num);
}
这将允许(可选)一个空格或一个_
后的字母。
如果您想要更灵活,可以在字母所在的类中添加字符。
var numAlpha = new Regex("(?<Alpha>[a-zA-Z _]*)(?<Numeric>[0-9]*)");
在字符串中的数字(例如“Foo _ bar ___ 123
”匹配)之前,任何数量的空格和下划线都会允许。
<强>的Unicode 强>
如果您想匹配所有字母而不仅仅是ASCII字母,请尝试Unicode code properties
\p{L}
将是任何语言的任何字母
\d
是数字
var numAlpha = new Regex("(?<Alpha>[\p{L} _]*)(?<Numeric>\d*)");
进一步阅读
对于某些正则表达式基础知识,您可以看到
我的博文What absolutely every Programmer should know about regular expressions
关于regular-expressions.info的教程(关于正则表达式的非常好的来源)
答案 1 :(得分:0)
不确定这是否是你要求的,但是 - 如果你有1个空格或下划线:
var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)[ _]{1}(?<Numeric>[0-9]*)");
如果你有很多:
var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)[ _]*(?<Numeric>[0-9]*)");