この正規表現を試してください (を使用Negative look-ahead
): -
String[] arr = str.split("\\s+(?![^(]*\\))");
System.out.println(Arrays.toString(arr));
(
と の間ではないスペースでのみ分割されます)
。
出力: -
[HOME(SPADE0), HOME(HEART0), HOME(CLUB0), BOTTOMCOL(CLUBA), ON(HEART2 CLUBA)]
説明: -
\\s+ // split on space (one or more)
(?! // Negative look ahead (Not followed by)
[^(]* // Anything except `(` (0 or more)
\\) // Ending with `)`
) // End
したがって、スペースが と の間にある場合は のように(
なり)
ます(HEllo World)
。
上記の正規表現には一致しません。そこのスペースの後には次のものが続くため: -
[^(]* // Any string not containing `(` - World
\\) // Ending with `)`
ただし、これで問題が解決することに注意してくださいsplit
。しかし、理想的には、これは と で行う必要がPattern
ありMatcher
ます。@Markoの答えのように。