C#用多个字符拆分字符串

时间:2017-04-04 12:13:26

标签: c# regex

我想分割一个这样的字符串:

“---你好---你好-------你好---再见”

进入这样的数组:

“你好”; “你好你好” ; “再见”

我用这个命令试了一下:

test.Split(new string[] {"---"}, StringSplitOptions.RemoveEmptyEntries);

但这不起作用,它将“-------”分成3个“---- hello”。

编辑:

我无法修改文本,这是一个输入,我不知道它在修改之前的样子。

另一个例子是:

---示例---

---------示例文本--------

---例2 ---

并且它应该只拆分带有3个连字符的连字符而不是具有更多连字符的连字符。

5 个答案:

答案 0 :(得分:6)

您可以使用正则表达式拆分。正则表达式使用否定前瞻(?!-)来完全匹配三个-。另请参阅Get exact match of the word using Regex in C#

string sentence = "---hello--- hello ------- hello --- bye";
var result = Regex.Split(sentence, @"(?<!-)---(?!-)");
foreach (string value in result) {
   Console.WriteLine(value.Trim());
}

.net Fiddle

答案 1 :(得分:4)

使用正则表达式查找令牌的解决方案:

(?<!-)---(?!-)

Console.WriteLine(String.Join(",", System.Text.RegularExpressions.Regex.Split("---hello--- hello ------- hello --- bye", "(?<!-)---(?!-)")))

答案 2 :(得分:3)

我建议您尝试使用Regex.Split代替string.Split

  string source = "---hello1--- hello2 ------- hello3 --- bye";

  var result = Regex
    .Split(source, @"(?<=[^-]|^)-{3}(?=[^-]|$)") // splitter is three "-" only
    .Where(item => !string.IsNullOrEmpty(item))  // Removing Empty Entries
    .ToArray();

  Console.Write(string.Join(";", result));

结果:

  hello1; hello2 ------- hello3 ; bye

答案 3 :(得分:2)

  1. 替换-----通过其他从未测试过的东西,例如@@@ test.replace("------", "@@@")
  2. 拆分字符串
  3. 以------
  4. 取代@@@

答案 4 :(得分:0)

我建议使用像&#34; / split&#34; 这样的中性字符。比你可以使用test.Split(...)而不用担心它会分裂你想要的其他东西。 您的代码现在看起来像这样:

string test = "hello\split hello ------- hello \split bye";
test.Split("\split", StringSplitOptions.RemoveEmptyEntries);