如何保持Regex.Split的分隔符
本文关键字:分隔符 Split Regex 何保持 | 更新日期: 2023-09-27 18:06:05
我想在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);
结果。第二个!第三个吗?