Ответ 1
Использовать образы обработки с нулевой длиной; вы хотите разделить на
(?=\[)|(?<=\])
То есть, где-либо, где мы утверждаем соответствие литерального [
впереди или где мы утверждаем соответствие литерала ]
позади.
Как строковый литерал С#, это
@"(?=\[)|(?<=\])"
См. также
Связанные вопросы
- Разделение Java - это мои персонажи. - есть много примеров
Пример в 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]"