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

C# 如何保留Regex.Split的分隔符?,c#,regex,split,C#,Regex,Split,我想使用Regex类中的split函数拆分字符串。问题是它删除了分隔符,我想保留它们。优选地作为分割物中的分离元件 根据我发现的,只有不方便的方法才能实现这一点 有什么建议吗?重新添加: string[] Parts = "A,B,C,D,E".Split(','); string[] Parts2 = new string[Parts.Length * 2 - 1]; for (int i = 0; i < Parts.Length; i++) {

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

根据我发现的,只有不方便的方法才能实现这一点

有什么建议吗?

重新添加:

    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] = ",";
    }
string[]Parts=“A,B,C,D,E”。拆分(',');
字符串[]Parts2=新字符串[Parts.Length*2-1];
对于(int i=0;i
使用
匹配
查找字符串中的分隔符,然后获取值和分隔符

例如:

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));
string input=“asdf,asdf;asdf.asdf,asdf,asdf”;
var值=新列表();
int pos=0;
foreach(在正则表达式中匹配m.Matches(输入“[,.;]”){
添加(输入子字符串(pos,m.Index-pos));
值。添加(m值);
pos=m.索引+m.长度;
}
添加(输入子字符串(pos));
假设输入为“abc1defg2hi3jkl”,regex将选择数字

String input=“abc1defg2hi3jkl”;
var parts=Regex.Matches(输入@“\d+|\d+”)
.Cast()
.选择(m=>m.Value)
.ToList();

部分是:
abc
1
defg
2
hi
3
jkl
只需将模式放入捕获组,匹配项也将包含在结果中

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

{ "123", ".", "456", ".", "789" }
这也适用于许多其他语言:

  • JavaScript
    “123.456.789”。拆分(/(\)/g)
  • Python
    re.split(r“(\”,“123.456.789”)
  • Perl
    split(/(\)/g,“123.456.789”)
(但不是Java)

对于Java:

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

灵感来自这篇文章()

输入字符串?你的正则表达式?预期输出?@AndreasJohansson:相反,有示例代码要发布。您编写了
问题是它删除了…
在这种情况下,“it”是什么?这是一个经典的问题“我可以得到这个输出,但我想得到这个输出”-这是一个很好的问题,但是如果显示原始代码(它提供了接近但不完全是所需的输出),回答起来会容易得多。这个问题触发了一个错误。@AndreasJohansson-不要重新发布。如果你的帖子有问题,重新发布可能会自动禁止提问。相反,我认为这里的人只是简单地要求你发布一个不起作用的代码示例,这样就可以帮助他们为你定制一个基于你已经知道的解决方案,而不是猜测你知道什么,然后你回来评论说“不,我不是这个意思。”。请记住,这里的人们自愿花时间来帮助你,因此,明智的做法是通过发布他们的要求来帮助他们。希望这有帮助!:)@我真的试图重新表述这个问题,但我可以找到任何方法来做到这一点,而不损害我所问的问题。我真的很抱歉。我将完全忽略这个问题,因为它引起了很多关注。请不要以为我不理你。我只是切断受感染的线程。但是如果正则表达式有多个可能的匹配项,那么这就不起作用了。如果不知道使用了什么分隔符,该怎么办?你能给我们重复这个例子吗?哦,这个更好!有趣的例子-你匹配任何一个句点,实际上是一个句点+1为一个伟大的语法!但是,由于某些原因,它没有捕捉到最后一个元素,所以我只得到了您所说的内容,但789部分除外。在阅读“向前看”时,我看到它没有包含在结果中,比如:Regex.Match(“多说25英里,@“\d+\s(?=英里)”//输出:25,另一条语句声明,要在拆分时包含分隔符,请以正向前瞻方式包装模式,如:Regex.Split(“onetwotree”,@”(?=[A-Z]);//输出一二三confused@sortednoun仅当主体从该位置匹配时,前瞻匹配零个字符。向前看的身体不是比赛的一部分,所以没有额外的内容。拆分时,正文匹配的文本将包含在下一个数组项中<代码>(?=([A-Z])将创建一个带有字母的额外项目,并将其包含在下一个项目中。
123
.
456
.
789