2010-03-15 72 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