我有一个由字符(竖线字符)分隔的长字符串。我需要在第3和第4个管道之间获取文本。不知道怎么回事......
打开正则表达式或非正则表达式,以最有效率为准。特别是对扩展方法开放,如果不存在则可以传入:
答案 0 :(得分:6)
如果
string textBetween3rdAnd4thPipe = "zero|one|two|three|four".Split('|')[3];
不是你的意思,你需要更详细地解释。
答案 1 :(得分:2)
此正则表达式会将文本存储在|
$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;
}