如何使用正则表达式删除括号/括号中的所有非数字字符?

时间:2017-01-10 11:14:35

标签: java regex

我正在尝试从字符串中移除括号和括号之间的所有非数字字符,例如"hello (a1b2c3) (abc)"将变为"hello 123"

我如何使用正则表达式?

2 个答案:

答案 0 :(得分:6)

根据OP的评论,没有不平衡或转义的报价。记住这一点是单个replaceAll方法调用来实现:

String repl = input.replaceAll("(?:\\D(?=[^(]*\\))|\\)\\s*)", "");

//=> hello 123

使用正向前瞻我们使用前瞻\\D(?=[^(]*\\))找到括号内的所有非数字,然后我们删除),然后在替换中删除可选空格。

RegEx Demo

答案 1 :(得分:0)

您可以使用splitreplaceAll来实现此目标。

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