Как разбить строку, чтобы разделители остались в конце результата? - PullRequest
2 голосов
/ 20 марта 2012

У меня есть несколько разделителей.Например, {del1, del2, del3}.Предположим, у меня есть текст: Text1 del1 text2 del2 text3 del3

Я хочу разбить строку следующим образом:

  1. Text1 del1
  2. text2 del2
  3. text3 del3

Мне нужно получить массив строк, когда каждый элемент массива является текстовым.Как я могу сделать это в C #?

Ответы [ 5 ]

7 голосов
/ 20 марта 2012

String.Split позволяет использовать несколько разделителей.Я не знаю, соответствует ли это вашему вопросу, хотя.

Пример:

    String text = "Test;Test1:Test2#Test3";
    var split = text.Split(';', ':', '#');
   //split contains an array of "Test", "Test1", "Test2", "Test3"

Редактировать: вы можете использовать регулярное выражение для хранения разделителей.

 String text = "Test;Test1:Test2#Test3";
 var split = Regex.Split(text, @"(?<=[;:#])");
 // contains "Test;", "Test1:", "Test2#","Test3"
2 голосов
/ 20 марта 2012

Это должно сработать:

    const string input = "text1-text2;text3-text4-text5;text6--";
    const string matcher= "(-|;)";

    string[] substrings = Regex.Split(input, matcher); 

    StringBuilder builder = new StringBuilder();
    foreach (string entry in substrings)
    {
        builder.Append(entry);
    }

    Console.Out.WriteLine(builder.ToString());

обратите внимание, что в вашем массиве подстрок вы получите пустые строки для совпадений с двумя '-'; в конце вы можете игнорировать или делать то, что вам нравится, с этими значениями.

1 голос
/ 20 марта 2012

Как предложил @Matt Burland, используйте Regex

List<string> values = new List<string>();
string s = "abc123;def456-hijk,";

Regex r = new Regex(@"(.*;|.*-|.*,)");
foreach(Match m in r.Matches(s))
   values.Add(m.Value);
1 голос
/ 20 марта 2012

Вы можете использовать регулярное выражение.Для такой строки "text1; text2 | text3 ^" вы можете использовать это:

(.*;|.*\||.*\^)

Просто добавьте больше альтернативных шаблонов для каждого разделителя.

1 голос
/ 20 марта 2012

Если вы хотите сохранить разделитель при разбиении строки, вы можете использовать следующее:

string[] delimiters = { "del1", "del2", "del3" };

string input = "text1del1text2del2text3del3";
string[] parts = input.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

for(int index = 0; index < parts.Length; index++)
{
    string part = parts[index];
    string temp = input.Substring(input.IndexOf(part) + part.Length);

    foreach (string delimter in delimiters)
    {
        if ( temp.IndexOf(delimter) == 0)
        {
            parts[index] += delimter;
            break;
        }
    }
}

parts будет:

    [0] "text1del1" 
    [1] "text2del2" 
    [2] "text3del3" 
...