zoukankan      html  css  js  c++  java
  • 正则表达式去除括号的问题

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

    某字符串 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库使用python的socket编程
    js 实现继承的几种方式
    JAVA中获取当前系统时间
    IntelliJ Idea 常用快捷键列表
    关于报错:There is already 'xxxController' bean method的解决方法
    mysql 使用 GROUP BY 时报错 ERROR 1055 (42000)
    安装系统,用cmd进行分区
    Bootstrap关闭当前页
    bootstrap的日期选择器
    Bootstrap如何关闭弹窗
  • 原文地址:https://www.cnblogs.com/rock-turf/p/10674920.html
Copyright © 2011-2022 走看看