[英]Regex split string but keep separators
我想在一些分隔符上做一个Regex.Split ,但我想保留分隔符。 举一个我正在尝试的例子:
"abc[s1]def[s2][s3]ghi" --> "abc", "[s1]", "def", "[s2]", "[s3]", "ghi"
我提出的正则表达式是new Regex("\\\\[|\\\\]|\\\\]\\\\[")
的正则new Regex("\\\\[|\\\\]|\\\\]\\\\[")
。 但是,这给了我以下内容:
"abc[s1]def[s2][s3]ghi" --> "abc", "s1", "def", "s2", "", "s3", "ghi"
分隔符已经消失(考虑到我的正则表达式,这是有意义的)。 有没有办法编写正则表达式,以便保留分隔符本身?
使用零长度加工外观; 你想分开
(?=\[)|(?<=\])
也就是说,我们声明匹配文字[
在前面,或者我们断言文字的匹配]
后面的任何地方。
作为C#字符串文字,这是
@"(?=\[)|(?<=\])"
System.out.println(java.util.Arrays.toString(
"abc[s1]def[s2][s3]ghi".split("(?=\\[)|(?<=\\])")
));
// prints "[abc, [s1], def, [s2], [s3], ghi]"
System.out.println(java.util.Arrays.toString(
"abc;def;ghi;".split("(?<=;)")
));
// prints "[abc;, def;, ghi;]"
System.out.println(java.util.Arrays.toString(
"OhMyGod".split("(?=(?!^)[A-Z])")
));
// prints "[Oh, My, God]"
您可以使用.Matches
而不是.Split
,例如( http://www.ideone.com/gUjRM ):
string x = "abc[s1]def[s2][s3]ghi";
var r = new Regex(@"[^\[]+|\[[^\]]+\]");
var ms = r.Matches(x);
// do stuff with the MatchCollection `ms`.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.