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

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

根据我发现的其他讨论 ,只有不方便的方法来实现这一点。

有什么建议?

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

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

结果:

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

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

  • JavaScript"123.456.789".split(/(\.)/g)
  • Pythonre.split(r"(\.)", "123.456.789")
  • Perlsplit(/(\.)/g, "123.456.789")

(虽然不是Java)

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

例:

 string input = "asdf,asdf;asdf.asdf,asdf,asdf"; var values = new List(); 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)); 

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

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

零件将是: abc 1 defg 2 hi 3 jkl

加回来:

  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] = ","; }