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

26 c# regex split

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

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

有什么建议?

Mar*_*rot 64

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

string[] result = Regex.Split("123.456.789", @"(\.)");
Run Code Online (Sandbox Code Playgroud)

结果:

{ "123", ".", "456", ".", "789" }
Run Code Online (Sandbox Code Playgroud)

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

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

(虽然不是Java)


Guf*_*ffa 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));
Run Code Online (Sandbox Code Playgroud)