正则expression式拆分string,但保留分隔符
我想在一些分隔符上做一个Regex.Split ,但是我想保留分隔符。 举一个我想要的例子:
"abc[s1]def[s2][s3]ghi" --> "abc", "[s1]", "def", "[s2]", "[s3]", "ghi"
正则expression式我想出了new Regex("\\[|\\]|\\]\\[")
的正则new Regex("\\[|\\]|\\]\\[")
。 但是,这给了我以下几点:
"abc[s1]def[s2][s3]ghi" --> "abc", "s1", "def", "s2", "", "s3", "ghi"
分隔符已经消失(这是有道理的,因为我的正则expression式)。 有没有办法写正则expression式,使分隔符本身保存?
使用零长度加工周边; 你想分手
(?=\[)|(?<=\])
也就是说,我们可以在任何地方声明一个文字的匹配[
提前,或者我们断言文字匹配的地方]
。
作为一个C#string文字,这是
@"(?=\[)|(?<=\])"
也可以看看
- regular-expressions.info/Lookarounds
相关问题
- Java分裂正在吃我的angular色。 – 有很多例子
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("(?=(?!^)[AZ])") )); // 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`.