从alpha数字拆分数字部分

时间:2012-05-21 11:12:19

标签: c# regex

我有一个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和数字

请指导解决此问题

2 个答案:

答案 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*)");

进一步阅读

对于某些正则表达式基础知识,您可以看到

答案 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]*)");