38

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

根据我发现的其他讨论,只有不方便的方法可以实现这一目标。

有什么建议么?

4

5 回答 5

88

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

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

结果:

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

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

  • JavaScript"123.456.789".split(/(\.)/g)
  • 蟒蛇re.split(r"(\.)", "123.456.789")
  • 珀尔split(/(\.)/g, "123.456.789")

(虽然不是 Java)

于 2013-03-27T20:09:06.030 回答
7

用于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));
于 2013-03-27T19:49:30.817 回答
4

假设输入是“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

于 2013-03-27T19:56:32.473 回答
1

对于 Java:

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

输出:

123
.
456
.
789

受这篇文章的启发(如何拆分字符串但在 java 中保留分隔符?

于 2020-12-22T15:29:49.143 回答
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] = ",";
    }
于 2013-03-27T19:43:08.413 回答