从alpha数字拆分数字部分

我有一个AlphaNumeric值,可能包含空格或得分不足。 我想从中拆分数字并将值递增1,并需要将数字部分连接回Alpha部分。

例如,Alpha数字可以是:1- BA 123或2. BA_123

我使用了Regex,如果字符串不包含任何空格或得分,则它可以正常工作。 以下是用于拆分和递增1的代码:

string StrInputNumber="BA123" var numAlpha = new Regex("(?[a-zA-Z]*)(?[0-9]*)"); var match = numAlpha.Match(StrInputNumber); var alpha = match.Groups["Alpha"].Value; int num = int.Parse(match.Groups["Numeric"].Value); 

这仅适用于没有任何特殊字符的Alpha和数字

请指导解决此问题

您只需要在您期望的位置添加这些字符。

 string[] StrInputNumber = { "BA123", "BA_123", "BA 123", "Foo 1"}; foreach (String item in StrInputNumber) { Console.Write(item + "\t==>\t"); var numAlpha = new Regex("(?[a-zA-Z]*[ _]?)(?[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("(?[a-zA-Z _]*)(?[0-9]*)"); 

这将允许任何数量的空格和下划线在字符串中的数字之前的任何位置(例如“ Foo _ bar ___ 123 ”匹配)。

统一

如果要匹配所有字母而不仅仅是ASCII字母,请尝试使用Unicode代码属性

\p{L}可以是任何语言的任何字母

\d是数字的速记字符类

 var numAlpha = new Regex("(?[\p{L} _]*)(?\d*)"); 

进一步阅读

对于一些正则表达式的基础知识,你可以看到

  • 我的博客文章绝对每个程序员都应该了解正则表达式

  • regular-expressions.info上的教程(正则表达式的一个非常好的来源)

不确定这是否是你要求但是 – 如果你有1个空格或下划线:

 var numAlpha = new Regex("(?[a-zA-Z]*)[ _]{1}(?[0-9]*)"); 

如果你有很多:

 var numAlpha = new Regex("(?[a-zA-Z]*)[ _]*(?[0-9]*)");