C#split string但保留split chars/separator

99 c# string

我正在用三个不同的字符分割字符串,但我希望输出包含我分割的字符.有没有简单的方法来做到这一点?

cod*_*ast 151

如果分裂字符是,,.;,我会尝试:

using System.Text.RegularExpressions;
...    
string[] parts = Regex.Split(originalString, @"(?<=[.,;])")
Run Code Online (Sandbox Code Playgroud)

(?<=PATTERN)是积极的后视PATTERN.它应该在前面文本适合的任何地方匹配,PATTERN因此在每次出现任何字符后都应该匹配(和分割).

  • 这对我很有用 - 谢谢!我只是为了我的目的做了一个小调整,因为我想在每行的开头包括分隔符(而不是在结尾).请改用@"(?= [.,;])". (19认同)
  • 如果你想将分隔符保留在它们自己的部分(而不是分隔部分的开头或结尾),你也可以使用`@"([.,;])"`.根据https://msdn.microsoft.com/en-us/library/ze12yx1d(v=vs.110).aspx#Anchor_2,"如果在Regex.Split表达式中使用捕获括号,则任何捕获的文本都包含在结果字符串数组." (6认同)
  • 需要接受此答案,以便更容易访问.我是一位经验丰富的SO用户,我花了一段时间才找到它. (2认同)

esa*_*sac 24

从BFree的答案开始,我有相同的目标,但我想分割一个类似于原始Split方法的字符数组,并且每个字符串也有多个分割:

public static IEnumerable<string> SplitAndKeep(this string s, char[] delims)
{
    int start = 0, index;

    while ((index = s.IndexOfAny(delims, start)) != -1)
    {
        if(index-start > 0)
            yield return s.Substring(start, index - start);
        yield return s.Substring(index, 1);
        start = index + 1;
    }

    if (start < s.Length)
    {
        yield return s.Substring(start);
    }
}
Run Code Online (Sandbox Code Playgroud)


Con*_*ark 21

以防万一有人想要这个答案......

而不是string[] parts = Regex.Split(originalString, @"(?<=[.,;])")你可以使用你的分隔符string[] parts = Regex.Split(originalString, @"(?=yourmatch)")在哪里yourmatch.

假设原始字符串是

777-猫

777 - 狗

777 - 鼠标

777 - 老鼠

777 - 狼

Regex.Split(originalString, @"(?=777)") 会回来的

777 - 猫

777 - 狗

等等