代码之家  ›  专栏  ›  技术社区  ›  Phil B

将嵌套的双大括号对替换为单[重复]

  •  1
  • Phil B  · 技术社区  · 7 年前

    如何替换:

    ..((....))..
    

    使用:

    ..(...)..
    

    请注意,它不是 “(” 具有 “(” 是的。表达式必须确定要删除的子大括号对直接包含在父大括号对中,而不包含其他内容。

    如果有人能知道如何递归地工作,比如说。 “(((…))” “(…)”

    1 回复  |  直到 7 年前
        1
  •  1
  •   Aman Chhabra    7 年前

    您可以使用:

    ([(]*)(?:\([^)]*\))([)]*)
    

    如果第一个组的大小等于第二个组,或者使用最小值,则只需将组替换为空字符串。

    测试:

    (ABC)
    ((ABC))
    (((ABC)))
    ((ABC)a)
    

    匹配信息:

    Match 1
    Full match  0-5 `(ABC)`
    Group 1.    0-0 ``
    Group 2.    5-5 ``
    --> Hence, no update required
    Match 2
    Full match  6-13    `((ABC))`
    Group 1.    6-7 `(`
    Group 2.    12-13   `)`
    --> As Group 1 and Group 2 size is same, replace those values with '' resulting to '(ABC)
    Match 3
    Full match  14-23   `(((ABC)))`
    Group 1.    14-16   `((`
    Group 2.    21-23   `))`
    --> Same in this case as well
    Match 4
    Full match  24-30   `((ABC)`
    Group 1.    24-25   `(`
    Group 2.    30-30   ``
    --> As group 1 and group 2 are not of same size, reduce to the min one which is group 2 (size 0) and hence no update required leaving it to '((ABC)A)'
    

    Demo