Получить n-ю строку текста между 2 символами-разделителями - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть длинная строка текста, разделенная символом (символ трубы).Мне нужно, чтобы получить текст между 3-й и 4-й трубы.Не уверен, как это сделать ...

Открыт для регулярных выражений или без регулярных выражений, в зависимости от того, что наиболее эффективноОсобенно открыт для метода расширения, если такового не существует, чтобы можно было передать:

Ответы [ 5 ]

6 голосов
/ 21 сентября 2011

Если

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

не делает то, что вы имеете в виду, вам нужно объяснить более подробно.

2 голосов
/ 21 сентября 2011

Попробуйте

1002 *
2 голосов
/ 21 сентября 2011

Это регулярное выражение будет хранить текст между 3-м и 4-м |, который вы хотите в $1

/(?:([^|]*)|){4}/


Regex r = new Regex(@"(?:([^|]*)|){4}");
r.match(string);
Match m = r.Match(text);
trace(m.Groups[1].captures);
1 голос
/ 30 марта 2016

Вот мое решение, которое, как я ожидаю, будет более эффективным, чем другие, потому что оно не создает кучу строк и массив, которые не нужны.

/// <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;
}   
1 голос
/ 21 сентября 2011

Вы могли бы сделать

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

где str - ваша длинная строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...