用括号拆分字符串,用括号分组,java

1 java regex

我在这里查看了大多数正则表达式的问题,但没有一个与我的具体情况相符.

说我有一个字符串: "ABe(CD)(EF)GHi"

我想要: "A", "Be", "(CD)", "(EF)", "G", "Hi"

我试过了:

.split("(?=[A-Z\\(\\)])"), which gives me: "A", "Be", "(", "C", "D", ")", "(", "E", "F", ")", "G", "Hi".
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

And*_*eas 5

试试这个:

String input = "ABe(CD)(EF)GHi";

String[] split = input.split("(?=[A-Z](?![^(]*\\)))|(?=\\()|(?<=\\))");
System.out.println(Arrays.toString(split));
Run Code Online (Sandbox Code Playgroud)

产量

[A, Be, (CD), (EF), G, Hi]
Run Code Online (Sandbox Code Playgroud)

解释

 (?=              Before:
    [A-Z]           Uppercase letter
    (?![^(]*\))       not followed by ')' without first seeing a '('
                      i.e. not between '(' and ')'
 )
|(?=              or before:
    \(              '('
 )
|(?<=             or after:
     \)             ')'
 )
Run Code Online (Sandbox Code Playgroud)