• 正则表达式去除括号的问题


    正则表达式去除括号的问题

    某字符串 aaa(bbb)cccddd
    需求是要判断是否包含 aaa(bbb),如果包含,那就去掉(bbb),输出aaacccddd

    我们先使用正则表达式:
    String content = "aaa(bbb)cccddd";
    String reg= "aaa(\(bbb\))";
    Matcher mac = Pattern.compile(reg).matcher(content);
    if(mac.find()){
    content = content.replaceAll(mac.group(1), "");
    }

    这段代码却输出了 aaa()cccddd这样的结果
    为什么没有去掉括号呢?

    mac.group(1)输出了 (bbb) 的结果,却没有被replaceAll替换掉括号。原因是这里括号又没有正则转译,系统没有识别。

    (注:reg里的括号,没有转译的部分会被正则表达式识别为分组)

    所以这里只能用如下方法:
    String content = "aaa(bbb)cccddd";
    String reg= "aaa\(bbb\)";
    Matcher mac = Pattern.compile(reg).matcher(content);
    if(mac.find()){
    //因为正则里不识别括号,只能把括号里内容提取出来,然后前后拼接括号
    //取出括号里的内容
    String brace = getBrace(mac.group(1));
    //拼接括号
    brace = "\("+ brace + "\)";
    content = content.replaceAll(brace, "");
    }

    //提取括号里的内容
    public static String getBrace(String str){
    Pattern p = Pattern.compile("(\[[^\]]*\])");
    Matcher m = p.matcher(str);
    while(m.find()){
    str = m.group().substring(1, m.group().length()-1);
    }
    return str;
    }

    把去除括号的方法修改一下,拿出括号里的内容,前后拼接括号,再去除。

    这样就可以了。输出结果aaacccddd

  • 相关阅读:
    python list间的并集、差集与交集
    kafka常用命令,启动/停止/查看主题列表/消费/生产
    python json
    lrzsz
    HashMap实现原理,源码分析
    Java中try catch finally语句中含有return语句的执行情况
    Maven
    我的面试题
    JSON数据格式
    springMVC2
  • 原文地址:https://www.cnblogs.com/rock-turf/p/10674920.html
Copyright © 2020-2023  润新知