有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式(全部替换)但不是引导一个撇号

我需要一个正则表达式,用一个括号替换所有括号,但如果括号前面有撇号,则不需要

例子

a) ))) --> expected )
b) )))))) --> expected )
c) '))) --> expected ))

有人能帮忙吗? 我试过replaceAll("[^']\\)\\)+", ")"); 但不幸的是,这是行不通的


共 (3) 个答案

  1. # 1 楼答案

    对于示例数据,可以匹配')并在组中捕获一个或多个)

    然后替换为单个)

    ^{}

    根据@ctwheels的建议(谢谢!)这可以缩短为:

    ^{}

    解释

    这将使用一个alternation来匹配')或多次)

    当匹配时,您可以将其替换为单个)

  2. # 2 楼答案

    使用一个正则表达式删除额外的括号:

    replaceAll("(?<!')\\)+", ")")
    

    另一个是去掉引号'

    replaceAll("'\\)", ")")
    

    综合起来:

    System.out.println("')'))))".replaceAll("(?<!')\\)+", ")").replaceAll("'\\)", ")"));
    

    打印)))

    在线试用here

  3. # 3 楼答案

    试试正则表达式:

    (?<!(\'))\)+
    
    replaceAll("(?<!(\\'))\\)+", ")");