我有一個編碼字符串,我想從中檢索值。我意識到我可以做一些字符串操作(IndexOf
,LastIndexOf
等)從下面的字符串中提取12_35_55_219
,但我想知道是否有更乾淨的方法。從字符串中間檢索字符串
"AddedProject[12_35_55_219]0"
我有一個編碼字符串,我想從中檢索值。我意識到我可以做一些字符串操作(IndexOf
,LastIndexOf
等)從下面的字符串中提取12_35_55_219
,但我想知道是否有更乾淨的方法。從字符串中間檢索字符串
"AddedProject[12_35_55_219]0"
如果你可以肯定的字符串格式,則存在好幾種可能性:
我最喜歡的是創建一個非常簡單的標記生成器:
string[] arrParts = yourString.Split("[]".ToCharArray());
既然有字符串的常規格式,arrParts將有三個條目,而您感興趣的部分是arrParts[1]
。
如果字符串格式不同,那麼您將不得不使用其他技術。
這取決於字符串可以變化多少。比如,你可以使用正則表達式:
string input = "AddedProject[12_35_55_219]0";
string part = Regex.Match(input, @"\[[\d_]+\]").Captures[0].Value;
有兩種方法哪個,有IndexOf
和LastIndexOf
用方括號的參數可能對你有用。通過一點研究,你應該能夠拿出項目編號。
所以總而言之,如果你有一個可以應用到你的字符串的模式,最簡單的方法就是使用正則表達式,按照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
}
而這是假設您的標記只發生一次在字符串中。
這裏是瓦格納西爾韋拉的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
+1不建議正則表達式。 – Brian 2010-03-15 18:43:36
......否則我會遇到兩個問題,對吧;) – kmontgom 2010-03-15 18:46:37
@Brian:你爲什麼害怕正則表達式? – Guffa 2010-03-15 18:48:02