我想做一个 Regex.Split在一些分隔符上,但我想保留分隔符。举一个我正在尝试的例子:
"abc[s1]def[s2][s3]ghi" --> "abc", "[s1]", "def", "[s2]", "[s3]", "ghi"
我想出的正则表达式是 new Regex("\\[|\\]|\\]\\[")
。但是,这给了我以下内容:
"abc[s1]def[s2][s3]ghi" --> "abc", "s1", "def", "s2", "", "s3", "ghi"
分隔符消失了(考虑到我的正则表达式,这是有道理的)。有没有一种方法可以编写正则表达式以保留分隔符本身?
最佳答案
使用零长度机械环视;你想 split
(?=\[)|(?<=\])
也就是说,我们断言前面的文字 [
匹配,或者我们断言后面的文字 ]
匹配的任何地方。
作为 C# 字符串文字,这是
@"(?=\[)|(?<=\])"
另见
相关问题
- Java split is eating my characters. -- 有很多例子
Java 示例
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]"
关于c# - 正则表达式拆分字符串但保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2910536/