разделить строку с начальным и конечным символом - PullRequest
2 голосов
/ 06 октября 2011

Мне нужно разделить строку с помощью «переменной последовательности» ..

Например, у меня есть эта строка:

string myString="|1 Test 1|This my first line.|2 Test 2|This is my second line";

Мне нужно получить массив строк с:

Это моя первая строчка
Это моя вторая строчка.

И в то же время лучшим из лучших было бы получить это:
| 1 Test1 |
Это моя первая строчка
| 2 Test2 |
Это моя вторая строка.

Любая помощь?

Ответы [ 6 ]

3 голосов
/ 06 октября 2011

Вы можете использовать регулярное выражение для разбиения строки, например,

string str = "|1 Test 1|This is my first line.|2 Test 2|This is my second line.";
var pattern = @"(\|(?:.*?)\|)";
foreach (var m in System.Text.RegularExpressions.Regex.Split(str, pattern))
{
    Console.WriteLine(m);
}

Просто отмените первую запись (она будет пустой)

2 голосов
/ 06 октября 2011

string.Split with |в качестве параметра и для подстрок, если string.StartsWith число и string.EndsWidth число add |начать и закончить.это достаточно полезно?

1 голос
/ 06 октября 2011

Используя LINQ, вы можете сделать это следующим образом:

public IEnumerable<string> GetLines(string input)
{
    foreach (var line in input.Split(new [] {'|' }, StringSplitOptions.RemoveEmptyEntries))
    {
        if (Char.IsDigit(line[0]) && Char.IsDigit(line[line.Length - 1]))
            yield return "|" + line + "|";

        yield return line;
    }
}
1 голос
/ 06 октября 2011
string[] myStrings = myString.Split('|');

Это даст вам массив из 4 элементов, состоящий из:

1 Test 1
This is my first line.
2 Test 2
This is my second line.

Оттуда, я думаю, вы будете вынуждены перебирать элементы массива и определять правильный порядок действий для последующего элемента на основе содержимого текущего элемента.

0 голосов
/ 06 октября 2011

Разделить строку с помощью '|'и добавить их вручную кажется лучшей стратегией.

        string s = "|test1|This is a string|test2|this is a string";
        string[] tokens = s.Split(new char[] { '|' });

        string x = "";

        for (int i = 0; i < tokens.Length; i++)
        {
            if (i % 2 == 0 && tokens[i].Length > 0)
            {
                x += "\n" + tokens[i] + "\n";

            }
            else if(tokens[i].Length > 0)
            {
                x += "|" + tokens[i] + "|";
            }
        }
0 голосов
/ 06 октября 2011
string myString = "|1 Test 1|This my first line.|2 Test 2|This is my second line";
            string[] mainArray = myString.Split('|');
            String str = "";
            List<string> firstList = new List<string>();
            List<string> secondList = new List<string>();
            for (int i = 1; i < mainArray.Length; i++)
            {
                if ((i % 2) == 0)
                {
                    str += "\n|" + mainArray[i];
                    firstList.Add(mainArray[i]);
                }
                else
                {
                    str += "\n|" + mainArray[i] + "|";
                    secondList.Add(mainArray[i]);
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...