如何保持Regex.Split的分隔符

本文关键字:分隔符 Split Regex 何保持 | 更新日期: 2023-09-27 18:06:05

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

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

有什么建议吗?

如何保持Regex.Split的分隔符

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

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除外)

使用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));

假设输入是"abc1defg2hi3jkl", regex是用来挑选数字的

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

部件为:abc 1 defg 2 hi 3 jkl

对于Java:

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

输出:

123
.
456
.
789

灵感来自这篇文章(如何分割字符串,但在java中保留分隔符?)

把它们加回去:

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

for c#:将段落拆分为句子,保留分隔符句子被分成。还是?或!后跟一个空格(否则,如果句子中有邮件id,它将被分割)

string data="first. second! third? ";
Regex delimiter = new Regex("(?<=[.?!] )"); //there is a space between ] and )
string[] afterRegex=delimiter.Split(data);
结果

。第二个!第三个吗?