2012-05-21 28 views
2

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

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

我使用正则表达式,如果字符串中不包含任何空格或下得分它的工作原理。 下面是一个用来分割和增量代码:

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

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

请指导来解决这个问题

回答

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

\p{L}将是任何语言

\d任何字母是一个速记字符类数字

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

进一步阅读

对于一些正则表达式的基本知识,你可以看到regular-expressions.info

+0

谢谢它解决了我的问题 – Parameswari