获取2个分隔符之间的第n个文本字符串

时间:2011-09-21 16:30:43

标签: c# regex parsing delimited-text

我有一个由字符(竖线字符)分隔的长字符串。我需要在第3和第4个管道之间获取文本。不知道怎么回事......

打开正则表达式或非正则表达式,以最有效率为准。特别是对扩展方法开放,如果不存在则可以传入:

  • seperatorChar
  • 索引

5 个答案:

答案 0 :(得分:6)

如果

string textBetween3rdAnd4thPipe = "zero|one|two|three|four".Split('|')[3];

不是你的意思,你需要更详细地解释。

答案 1 :(得分:2)

此正则表达式会将文本存储在|

中所需的第3个和第4个$1之间
/(?:([^|]*)|){4}/


Regex r = new Regex(@"(?:([^|]*)|){4}");
r.match(string);
Match m = r.Match(text);
trace(m.Groups[1].captures);

答案 2 :(得分:2)

试试这个

public String GetSubString(this String originalStirng, StringString delimiter,Int32 Index)
{
   String output = originalStirng.Split(delimiter);
   try
   {
      return output[Index];
   }
   catch(OutOfIndexException ex)
   {
      return String.Empty;
   }
}

答案 3 :(得分:1)

你可以做到

     string text = str.Split('|')[3];

其中str是您的长字符串。

答案 4 :(得分:1)

这是我的解决方案,我希望它比其他解决方案更有效,因为它不会创建一堆字符串和不需要的数组。

/// <summary>
/// Get the Nth field of a string, where fields are delimited by some substring.
/// </summary>
/// <param name="str">string to search in</param>
/// <param name="index">0-based index of field to get</param>
/// <param name="separator">separator substring</param>
/// <returns>Nth field, or null if out of bounds</returns>
public static string NthField(this string str, int index, string separator=" ") {
    int count = 0;
    int startPos = 0;
    while (startPos < str.Length) {
        int endPos = str.IndexOf(separator, startPos);
        if (endPos < 0) endPos = str.Length;
        if (count == index) return str.Substring(startPos, endPos-startPos);
        count++;
        startPos = endPos + separator.Length;
    }
    return null;
}