如何保留Regex.Split的分隔符?

时间:2013-03-27 19:39:17

标签: c# regex split

我想使用Split类中的Regex函数拆分字符串。问题是它删除了分隔符,我想保留它们。优选地作为分裂中的单独元素。

根据我发现的other discussions,只有不方便的方法来实现这一目标。

有什么建议吗?

5 个答案:

答案 0 :(得分:63)

只需将模式放入捕获组,匹配也将包含在结果中。

string[] result = Regex.Split("123.456.789", @"(\.)");

<强>结果:

{ "123", ".", "456", ".", "789" }

这也适用于许多其他语言:

  • JavaScript "123.456.789".split(/(\.)/g)
  • Python re.split(r"(\.)", "123.456.789")
  • Perl split(/(\.)/g, "123.456.789")

(不是Java)

答案 1 :(得分:6)

使用Matches查找字符串中的分隔符,然后获取值和分隔符。

示例:

string input = "asdf,asdf;asdf.asdf,asdf,asdf";

var values = new List<string>();
int pos = 0;
foreach (Match m in Regex.Matches(input, "[,.;]")) {
  values.Add(input.Substring(pos, m.Index - pos));
  values.Add(m.Value);
  pos = m.Index + m.Length;
}
values.Add(input.Substring(pos));

答案 2 :(得分:3)

  

说输入是“abc1defg2hi3jkl”,正则表达式是选择数字。

String input = "abc1defg2hi3jkl";
var parts = Regex.Matches(input, @"\d+|\D+")
            .Cast<Match>()
            .Select(m => m.Value)
            .ToList();

部分可能是:abc 1 defg 2 hi 3 jkl

答案 3 :(得分:0)

将它们添加回来:

    string[] Parts = "A,B,C,D,E".Split(',');
    string[] Parts2 = new string[Parts.Length * 2 - 1];
    for (int i = 0; i < Parts.Length; i++)
    {
        Parts2[i * 2] = Parts[i];
        if (i < Parts.Length - 1)
            Parts2[i * 2 + 1] = ",";
    }

答案 4 :(得分:0)

对于 Java:

Arrays.stream("123.456.789".split("(?<=\\.)|(?=\\.)+"))
                .forEach((p) -> {
                    System.out.println(p);
                });

输出:

123
.
456
.
789

灵感来自这篇文章 (How to split string but keep delimiters in java?)