我试图从字符串中删除括号和括号之间的所有非数字字符,例如"hello (a1b2c3) (abc)"
将变为"hello 123"
。如何使用正则表达式删除括号/括号之间的所有非数字字符?
我该如何使用正则表达式?
我试图从字符串中删除括号和括号之间的所有非数字字符,例如"hello (a1b2c3) (abc)"
将变为"hello 123"
。如何使用正则表达式删除括号/括号之间的所有非数字字符?
我该如何使用正则表达式?
按照评论从OP有没有不平衡或转义引号。这里牢记这一点是一个replaceAll
方法调用来实现的是:
String repl = input.replaceAll("(?:\\D(?=[^(]*\\))|\\)\\s*)", "");
//=> hello 123
使用正向前查找,我们发现所有的非数字是使用先行\\D(?=[^(]*\\))
括号内,然后我们删除)
其次是可选的空间在交替。在一个更复杂的正则表达式,这比删除多个字符,并没有认为这是有关这个问题的一个更大的项目中使用此
多数民众赞成它,谢谢! – FrankK
您可以使用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
@TheLostMind IM,这是它最终将包含正则表达式((?s)(<| \\ [| \“)。*?(> | \\] | \\}))| \\(| \\)” – FrankK
我想你可能需要一个解析器,我的原始(错误)答案一目了然,并且假设你只是想完全删除括号内的术语 –
是否还有不平衡或转义的括号? – anubhava