Как разбить эту строку в C #? - PullRequest
4 голосов
/ 15 апреля 2010

Я действительно не привык к методу разбиения строки в c #, и мне было интересно, как получается, что нет разделения на более чем одну функцию char?

и моя попытка разбить эту строку ниже с помощью регулярных выражений только что закончилась разочарованием. кто-нибудь может мне помочь?

В основном я хочу разбить строку ниже до

aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^

в

aa**aa**bb**dd
a2a**a2a**b2b**dd

, а затем в

aa
aa
bb
dd

a2a
a2a
b2b
dd

спасибо!

Ответы [ 7 ]

10 голосов
/ 15 апреля 2010

Вы можете разделить, используя string[]. Есть несколько перегрузок .

string[] splitBy = new string[] {"^__^"};
string[] result = "aa*aa*bb*dd^__^a2a*a2a*b2b*dd^__^".Split(splitBy, StringSplitOptions.None);

// result[0] = "aa*aa*bb*dd", result[1] = "a2a*a2a*b2b*dd"
7 голосов
/ 15 апреля 2010

Вы ищете эту перегрузку :

someString.Split(new string[] { "^__^" }, StringSplitOptions.None);

Я никогда не понимал, почему нет String.Split(params string[] separators).
Однако вы можете написать его как метод расширения:

public static string[] Split(this string str, params string[] separators) {
    return str.Split(separators, StringSplitOptions.None);
}
2 голосов
/ 15 апреля 2010
var split = @"aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^".Split(new string[] {"^__^"}, StringSplitOptions.RemoveEmptyEntries);

foreach(var s in split){
   var split2 = s.Split(new string[] {"**"}, StringSplitOptions.RemoveEmptyEntries);
}
1 голос
/ 15 апреля 2010

Это даст вам IEnumerable<IEnumerable<string>>, содержащее нужные значения.

string[] split1 = new[] { "^__^" };
string[] split2 = new[] { "**" };
StringSplitOptions op = StringSplitOptions.RemoveEmptyEntries;
var vals = s.Split(split1,op).Select(p => p.Split(split2,op).Cast<string>());

Вы также можете добавить туда ToList(), если вы хотите List<List<string>> или ToArray() для зубчатого массива

0 голосов
/ 15 апреля 2010

Версия VB.NET, которая работает.

Модуль Модуль1

Sub Main()
    Dim s As String = "aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^"
    Dim delimit As Char() = New Char() {"*"c, "^"c, "_"c}

    Dim split As String() = s.Split(delimit, StringSplitOptions.RemoveEmptyEntries)
    Dim c As Integer = 0
    For Each t As String In split
        c += 1
        Console.WriteLine(String.Format("{0}: {1}", c, t))
    Next

End Sub
0 голосов
/ 15 апреля 2010

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

string x = "aa**aa**bb**dd^__^a2a**a2a**b2b**dd^__^";
string[] y =  x.Split(new string[]{"^__^"},StringSplitOptions.None);
string[] z = y[0].Split(new string[]{"**"},StringSplitOptions.None);
0 голосов
/ 15 апреля 2010

Как насчет одного из них:

string.Join("**",yourString.Split("^__")).Split("**")
yourString.Replace("^__","**").Split("**")

Вам нужно будет проверить последний элемент, в вашем примере это будет пустая строка.

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