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

C#按多个字符拆分字符串,c#,regex,C#,Regex,我想像这样拆分一个字符串: “---你好---你好-----你好---再见” 进入如下数组: “你好”;“你好------你好”;“再见” 我用这个命令试过了: test.Split(new string[] {"---"}, StringSplitOptions.RemoveEmptyEntries); 但这不起作用,它将“-----”拆分为3个this“-----hello” 编辑: 我不能修改文本,这是一个输入,我不知道它看起来如何,然后我必须修改它 另一个例子是: ---范例--- -

我想像这样拆分一个字符串:

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

进入如下数组:

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

我用这个命令试过了:

test.Split(new string[] {"---"}, StringSplitOptions.RemoveEmptyEntries);
但这不起作用,它将“-----”拆分为3个this“-----hello”

编辑:

我不能修改文本,这是一个输入,我不知道它看起来如何,然后我必须修改它

另一个例子是:

---范例---

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

---例2---

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

  • 用你的测试中从未出现过的东西来替换------,比如@@
    test。替换(“------”,“@@@@@@”)
  • 分开你的绳子
  • 将@@@替换为------
  • 用你的测试中从未出现过的东西来替换------,比如@@
    test。替换(“------”,“@@@@@@”)
  • 分开你的绳子
  • 将@@@替换为------

  • 我建议使用中性字符,如“/split”或类似的字符。您可以使用
    test.Split(…)
    而不用担心它会分割您想要的其他内容。 您的代码现在看起来如下所示:

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

    我建议使用中性字符,如“/split”或类似的字符。您可以使用
    test.Split(…)
    而不用担心它会分割您想要的其他内容。 您的代码现在看起来如下所示:

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

    我建议尝试
    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));
    

    我建议尝试
    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));
    

    您可以使用正则表达式拆分。正则表达式使用一个负前瞻
    (?!-)
    来只精确匹配三个
    -
    。另见

    string句子=“---你好---你好-----你好---再见”;
    
    var result=Regex.Split(句子,@)(?您可以使用Regex Split。Regex使用负前瞻
    (?!-)
    仅精确匹配三个
    -
    。另请参阅

    string句子=“---你好---你好-----你好---再见”;
    
    var result=Regex.Split(句子,@“(?使用Regex查找令牌的解决方案:

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

    (?使用regex查找代币的解决方案:

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


    (?这很正常。-----包含---@RegisPortalez是的,但这就是问题所在,我想像这样拆分它,即使它包含它。字符串。拆分在这里不是正确的选择。它不能做你想做的。我想正则表达式将是你的朋友。你有其他几个例子吗?有人可以向你提出只适用于给定exa的解决方案例如。当我们不知道字符串的哪些部分可以更改时,很难提供可靠的解决方案。@我们有正则表达式的解决方案吗?我真的很不擅长。这很正常。------包含。------RegisPortalez是的,但这就是问题所在,我想像这样拆分它,即使它包含它。字符串。拆分在这里不是正确的选择。它不能满足你的要求。我认为正则表达式将是你的朋友。你有其他几个例子吗?有人可以向你提出只适用于给定例子的解决方案。当我们不知道字符串的哪些部分可以更改时,很难提供可靠的解决方案。@swe你有正则表达式的解决方案吗?我真的不擅长。4的序列呢,6,7,8等?问题是我不知道字符串包含多少字符,每次输入都可能不同,因此解决方案对我不起作用。那么4,6,7,8等序列呢?问题是我不知道字符串包含多少字符,每次输入都可能不同,所以解决方案对我不起作用。你是在假设该OP可以选择更改输入,我在这里非常怀疑。@DavidG确切地说,我不能这样做。您假设OP可以选择更改输入,我在这里非常怀疑。@DavidG确切地说,我不能这样做。这正是我要找的,谢谢:)这正是我要找的,谢谢:)相同的答案,相同的时间:)相同的答案,相同的时间:)