2010-03-15 70 views
5

我有一個編碼字符串,我想從中檢索值。我意識到我可以做一些字符串操作(IndexOfLastIndexOf等)從下面的字符串中提取12_35_55_219,但我想知道是否有更乾淨的方法。從字符串中間檢索字符串

"AddedProject[12_35_55_219]0" 

回答

6

如果你可以肯定的字符串格式,則存在好幾種可能性:

我最喜歡的是創建一個非常簡單的標記生成器:

string[] arrParts = yourString.Split("[]".ToCharArray());

既然有字符串的常規格式,arrParts將有三個條目,而您感興趣的部分是arrParts[1]

如果字符串格式不同,那麼您將不得不使用其他技術。

+1

+1不建議正則表達式。 – Brian 2010-03-15 18:43:36

+1

......否則我會遇到兩個問題,對吧;) – kmontgom 2010-03-15 18:46:37

+1

@Brian:你爲什麼害怕正則表達式? – Guffa 2010-03-15 18:48:02

4

這取決於字符串可以變化多少。比如,你可以使用正則表達式:

string input = "AddedProject[12_35_55_219]0"; 
string part = Regex.Match(input, @"\[[\d_]+\]").Captures[0].Value; 
1

有兩種方法哪個,有IndexOfLastIndexOf用方括號的參數可能對你有用。通過一點研究,你應該能夠拿出項目編號。

5

所以總而言之,如果你有一個可以應用到你的字符串的模式,最簡單的方法就是使用正則表達式,按照Guffa的例子。

另一方面,您始終有不同的標記來定義字符串的開始和結束,那麼您應該使用IndexOf和LastIndexOf組合,並將標記作爲參數傳遞,使Fredrik的示例稍微多一點通用:

string GetMiddleString(string input, string firsttoken, string lasttoken) 
{ 
    int pos1 = input.IndexOf(firsttoken) + 1; 
    int pos2 = input.IndexOf(lasttoken); 
    string result = input.Substring(pos1 , pos2 - pos1); 
    return result 
} 

而這是假設您的標記只發生一次在字符串中。

0

這裏是瓦格納西爾韋拉的GetMiddleString

string GetMiddleString(string input, string firsttoken, string lasttoken) 
    { 
     int pos1 = input.ToLower().IndexOf(firsttoken.ToLower()) + firsttoken.Length; 
     int pos2 = input.ToLower().IndexOf(lasttoken.ToLower());    
     return input.Substring(pos1 , pos2 - pos1); 
    } 

一個改進在這裏你如何使用它

string data = "AddedProject[12_35_55_219]0"; 
string[] split = data.Split("[]".ToCharArray()); 
rtbHelp.Text += GetMiddleString(data, split[0], split[2]).Trim("[]".ToCharArray());//print it to my C# winForm RichTextBox Help