string.split-由多个字符分隔符


151

我在用“] [”分隔符在c#中拆分字符串时遇到麻烦。

例如,字符串“ abc] [rfd] [5] [,] [。”

应该产生一个包含的数组;
ABC
RFD
5

但是,即使我尝试使用RegEx,也似乎无法使它正常工作,但我无法在定界符上进行拆分。

编辑:本质上我想解决此问题而无需正则表达式。我接受的解决方案是;

string Delimiter = "][";  
var Result[] = StringToSplit.Split(new[] { Delimiter }, StringSplitOptions.None);

我很高兴能够解决这个分裂的问题。

c#  split 

向我们显示失败的代码。
康拉德·鲁道夫

另外,除了您已发布的内容之外,还请发布您希望获得的结果。
Lasse V. Karlsen,

Answers:


268

同时显示string.SplitRegex用法:

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None);
string[] parts2 = Regex.Split(input, @"\]\[");

5
或者,如果像我这样的最小代码肛门:'var parts1 = input.Split(new [] {“] [”},StringSplitOptions.None);'
Paul Grimshaw 2014年

2
什么是提供的好处StringSplitOptions.Noneinput.Split(new string[] { "][" })
seebiscuit

1
前提是两个字符都正确吗?如果我想用“ [”或“]”分开怎么办?从目前的测试来看,我猜那是一个不同的故事,对吗?
C4d

谢谢,它有效!!
Kumar

3
@ C4u String.Split("[]".ToCharArray())这将分别由[和]分割。例如:Hello [World] Its [Me!会是:你好,世界,它,我!
马杜德

36
string tests = "abc][rfd][5][,][.";
string[] reslts = tests.Split(new char[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries);

8
请注意,这种方法假设他的意思是分割每个[]和[,即使它们未出现在[]组合中。
拉瑟五世卡尔森

2
string.Split的重载将其视为2个单独的定界符-只是您将其余部分丢弃。有一个过载,它接受一个字符串作为定界符(实际上是一个字符串数组)-因此您不必删除空值(也意味着:当数据中有效存在空值时,您可以找到空值)
Marc Gravell

您的假设是[正确的。他没有具体说明,所以我给了他一些适合他的榜样的东西。如果他不想跳过它们,那就行得通。但是,如果没有更多信息,我们将永远不会知道
SwDevMan81'2009年

那就是想要的。在这个问题上,这是一个简单的问题,但这是一个高级答案。
Bitterblue 2014年

那正是我想要的。但是正确的答案对我来说也是个新闻,不知道您可以像Marc所说的那样使用多个角色分开。语法很垃圾。
Piotr Kula 2015年

13

另外的选择:

用单个字符替换字符串定界符,然后在该字符上分割。

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Replace("][","-").Split('-');

1
这就是我要做的。它为我提供了一种适用于所有平台的标准化通用方法,而无需担心特定于平台的技巧。
David Betz'1

5
这不是一个好主意。考虑: string input = "abc][rf-d][5"。“ rf-d”中的“-”将作为定界符。请参阅上面的可接受答案。
吉拉德·巴纳

在这种情况下,在一个不太可能的字符,如〜或`或甚至非键盘字符,如用和分裂替换¿或◙等
seabass2020

1
我喜欢该解决方案,以防其清晰,强大并且可以标准化。我的用法Dim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.