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

C# string.split-由多个字符分隔符分隔,c#,split,C#,Split,在c#中拆分分隔符为“][”的字符串时遇到问题 例如字符串“abc][rfd][5][,][ 应生成一个包含以下内容的数组: abc rfd 5 , 但我似乎无法让它工作,即使我尝试RegEx,也无法在分隔符上进行分割 编辑:本质上我想解决这个问题,而不需要正则表达式 string Delimiter = "]["; var Result[] = StringToSplit.Split(new[] { Delimiter }, StringSplitOptions.None); 我很高兴

在c#中拆分分隔符为“][”的字符串时遇到问题

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

应生成一个包含以下内容的数组:
abc
rfd
5

但我似乎无法让它工作,即使我尝试RegEx,也无法在分隔符上进行分割

编辑:本质上我想解决这个问题,而不需要正则表达式

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

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

要同时显示
string.split
Regex
用法:

string tests = "abc][rfd][5][,][.";
string[] reslts = tests.Split(new char[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries);
string input = "abc][rfd][5][,][.";
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None);
string[] parts2 = Regex.Split(input, @"\]\[");
另一种选择:

用单个字符替换字符串分隔符,然后拆分该字符

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

直接使用非字符串数组但使用字符串的更快速方法:

string[] StringSplit(string StringToSplit, string Delimitator)
{
    return StringToSplit.Split(new[] { Delimitator }, StringSplitOptions.None);
}

StringSplit("E' una bella giornata oggi", "giornata");
/* Output
[0] "E' una bella giornata"
[1] " oggi"
*/

向我们展示您失败的代码。此外,请发布您从中获得的信息,除了您发布的信息外,还请发布您希望从中获得的信息。注意:这种方法假设他打算在每个]和[,即使它们没有出现在][组合。string.Split的重载将其视为两个单独的分隔符-只需丢弃其余的分隔符即可。有一个重载接受字符串作为分隔符(实际上是一个字符串数组)-因此您不必删除空值(也意味着:当空值有效存在于数据中时,您可以找到空值)假设是[正确。他没有具体说明,所以我给了他一些对他的例子有用的东西。如果他不想跳过它们,那就行了。但是如果没有更多的信息,我们永远不会知道这就是我想要的。在这个问题上,这是一个简单的问题,但这是一个高级答案。这正是我想要的。但正确的答案对我来说也是新闻,我不知道你可以像Marc描述的那样用一个以上的字符分割。语法非常糟糕。或者如果你的最小代码像我一样:'var parts1=input.split(new[]{][“},StringSplitOptions.None);'s提供
StringSplitOptions.None
over
input.split(new string[]{]}有什么好处
?这假设两个字符都有,对吗?如果我想用“[”或“]”分开呢?从我目前的测试来看,我想这是另一回事,对吧?@C4u
String.split(“[”).ToCharArray())
这将分别用[and]分开。例如:Hello[World]Its[Me!应该是:Hello,World,Its,Me!看起来是这样的“,StringSplitOptions.None”是必需的,否则它将尝试使用以char作为参数的方法(但我对这种行为感到非常惊讶)这就是我所做的。它为我提供了一种规范化、通用的方法,可以在所有平台上工作,而不必担心平台特定的技巧。这不是一个好主意。请考虑:
string input=“abc][rf-d][5”
。rf-d中的“-”“将被捕获为分隔符。请改为查看上面已接受的答案。在这种情况下,请替换为不太可能的字符,如~或`或甚至是非键盘字符,如?”或◙ 我的用法
Dim Levels作为新列表(字符串)(newSelectedTask.Replace(LevelDelimter,Chr(13)).Split(Chr(13)))
这有什么不同?正是因为答案非常古老,任何看到这个问题的人都将能够找到更新、也许更实用的解决方案。“非常古老”answer使用的代码与您最新的、功能更强大的解决方案相同。在任何情况下,我的评论都是为了提示您编辑您的答案,并对您的代码与现有答案的优劣进行更多解释。answer使用解释进行编辑。
string[] StringSplit(string StringToSplit, string Delimitator)
{
    return StringToSplit.Split(new[] { Delimitator }, StringSplitOptions.None);
}

StringSplit("E' una bella giornata oggi", "giornata");
/* Output
[0] "E' una bella giornata"
[1] " oggi"
*/