2011-04-14 67 views
0

取代我有一些字符串象下面這樣:字符串操作檢查,並與最快速的方法

string num1 = "D123_1"; 
string num2 = "D123_2"; 
string num3 = "D456_11"; 
string num4 = "D456_22"; 
string num5 = "D_123_D"; 
string num5 = "_D_123"; 

我想打一個功能,將執行以下操作:

1-檢查給定的字符串在它裏面有一個下劃線,這個下劃線應該在一些數字和後面加上一些數字:在這種情況下'num5'和'num6'是無效的!

2-具有任意字符串中的最後底線後,更換號碼,例如我想「NUM1 =‘D123_1’」改變成「D123_2」

到目前爲止,我想出了這個想法,但它不工作:(首先,我不知道如何檢查標準1和第二替換語句不工作:

private string CheckAndReplace(string given, string toAdd) 
    { 
     var changedString = given.Split('_'); 
     return changedString[changedString.Length - 1] + toAdd; 
    } 

任何幫助和提示將appriciated

回答

1

你在找什麼是一個正則表達式。這是(主要)從我的頭頂。但它應該很容易地指向正確的方向。正則表達式正常工作。

public static Regex regex = new Regex("(?<character>[a-zA-Z]+)(?<major>\\d+)_(?<minor>\\d+)",RegexOptions.CultureInvariant | RegexOptions.Compiled); 

Match m = regex.Match(InputText); 
if (m.Succes) 
{ 
    var newValue = String.Format("{0}{1}_{2}"m.Groups["character"].Value, m.Groups["major"].Value, m.Groups["minor"].Value); 
} 
+0

感謝regext似乎工作很好! – 2011-04-14 10:24:05

1

你可以使用正則表達式(這不是一個完整的實現,只是一個提示):

private string CheckAndReplace(string given, string toAdd) 
{ 
    Regex regex = new Regex("([A-Z]*[0-9]+_)[0-9]+"); 

    if (regex.IsMatch(given)) 
    { 
     return string.Concat(regex.Match(given).Groups[1].Value, toAdd); 
    } 
    else 
    { 
     ... do something else 
    } 
} 
1

在你的代碼分割字符串到字符串數組,然後訪問錯誤數組的索引,所以它沒有做你想要的。

嘗試使用子字符串代替。找到的最後一個「_」的索引,然後讓子:

private string CheckAndReplace(string given, string toAdd) { 
     int index = given.LastIndexOf('_')+1; 
     return given.Substring(0,index) + toAdd; 
    } 

但是,檢查字符串的有效性之前(見其他答案)。如果字符串中沒有'_',此代碼片段將會中斷。

相關問題