2012-05-21 31 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