2

我有一个 AlphaNumeric 值,其中可能包含空格或低于分数。我想从中拆分数字并将值加一,并且需要将数字部分连接回 Alpha 部分。

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

我使用了 Regex,如果字符串不包含任何空格或下划线,它就可以工作。这是用于拆分和递增一的代码:

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);

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

请指导解决这个问题

4

2 回答 2

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”将匹配)。

统一码

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

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

\d是数字的简写字符类

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

进一步阅读

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

于 2012-05-21T11:51:29.100 回答
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]*)");
于 2012-05-21T11:30:46.553 回答