【问题标题】:To split numeric part from alpha numeric从字母数字中拆分数字部分
【发布时间】:2012-05-21 11:12:19
【问题描述】:

我有一个 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);

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

请指导解决此问题

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您只需将这些字符添加到您期望的位置即可。

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

    进一步阅读

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

    【讨论】:

      【解决方案2】:

      不确定这是否是您所要求的,但是 - 如果您有 1 个空格或下划线:

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

      如果你有很多:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        • 2016-09-15
        • 2013-03-12
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多