我正在尝试从字符串中移除括号和括号之间的所有非数字字符,例如"hello (a1b2c3) (abc)"
将变为"hello 123"
。
我如何使用正则表达式?
答案 0 :(得分:6)
根据OP的评论,没有不平衡或转义的报价。记住这一点是单个replaceAll
方法调用来实现:
String repl = input.replaceAll("(?:\\D(?=[^(]*\\))|\\)\\s*)", "");
//=> hello 123
使用正向前瞻我们使用前瞻\\D(?=[^(]*\\))
找到括号内的所有非数字,然后我们删除)
,然后在替换中删除可选空格。
答案 1 :(得分:0)
您可以使用split
和replaceAll
来实现此目标。
public static void main(String[] args) {
String s = "hel121lo (a1b2c3) (abc)";
String[] arr = s.split("\\s+");
StringJoiner sj = new StringJoiner(" ");
for (String str : arr) {
// System.out.println(str);
if (str.contains("(")) {
String k = str.replaceAll("\\D|\\(|\\)a", "");
sj.add(k);
} else {
sj.add(str);
}
}
System.out.println(sj.toString());
}
O / P:
hel121lo 123