当前位置:  开发笔记 > 编程语言 > 正文

C#split string但保留split chars/separator

如何解决《C#splitstring但保留splitchars/separator》经验,为你挑选了3个好方法。

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



1> codybartfast..:

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

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

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


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

2> esac..:

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

public static IEnumerable 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);
    }
}



3> Conrad Clark..:

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

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

假设原始字符串是

777-猫

777 - 狗

777 - 鼠标

777 - 老鼠

777 - 狼

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

777 - 猫

777 - 狗

等等

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有