如何在c#中拆分此字符串?

时间:2010-04-15 13:02:48

标签: c# regex split

我真的不习惯c#中的split string方法,我想知道怎么没有多个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 个答案:

答案 0 :(得分:10)

您可以使用string[]进行拆分。有几个overloads

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"

答案 1 :(得分:7)

您正在寻找this overload

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 :(得分:2)

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);
}

答案 3 :(得分:1)

这将为您提供包含所需值的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()

答案 4 :(得分:0)

其中一个怎么样:

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

您必须检查最后一项,在您的示例中,它将是一个空字符串。

答案 5 :(得分:0)

如前所述,您可以将字符串数组传递给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);

答案 6 :(得分:0)

有效的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