我试图用下划线替换方括号内的破折号,但它用字符串中的下划线替换所有破折号。
例如,我要替换
"[a]-[a-gamma]"
与
"[a]-[a_gamma]"
但是它将下划线替换字符串中的 所有 破折号。
您可以使用
String n="[a]-[a-gamma]"; System.out.println(n.replaceAll("-(?=[^\\[\\]]*\\])", "_"));
至于正则表达式本身,-只有在符号后跟非[s和非]s的情况下,我才会匹配该符号,直到引擎找到为止]。然后,我们在[]s中。可能情况并非如此(第4个连字符[a-z]-[a-z] - ] [a-z]),但我希望这不是您的情况。
-
[
]
[]
[a-z]-[a-z] - ] [a-z]
IDEONE演示
输出:
[a]-[a_gamma]