正则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`.