从字符串中间检索字符串

时间:2010-03-15 18:38:42

标签: c# string

我有一个编码字符串,我想从中检索一个值。我意识到我可以进行一些字符串操作(IndexOfLastIndexOf等)从下面的字符串中提取12_35_55_219,但我想知道是否有更简洁的方法

"AddedProject[12_35_55_219]0"

5 个答案:

答案 0 :(得分:6)

如果您可以确定字符串的格式,则存在多种可能性:

我最喜欢的是创建一个非常简单的标记器:

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

由于字符串有常规格式,因此arrParts将有三个条目,您感兴趣的部分将为arrParts[1]

如果字符串格式不同,那么您将不得不使用其他技术。

答案 1 :(得分: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
}

这假设您的令牌只在字符串中发生一次。

答案 2 :(得分:4)

这取决于字符串可以变化多少。例如,您可以使用正则表达式:

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

答案 3 :(得分:1)

您可能会发现有两种方法很有用,IndexOfLastIndexOf方括号作为参数。通过一些研究,您应该能够提取项目编号。

答案 4 :(得分:0)

这是Wagner Silveira的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