【问题标题】:Regex to select wrong curly braces for parentheses正则表达式为括号选择错误的花括号
【发布时间】:2021-07-17 15:44:17
【问题描述】:

我的叙述有一些错别字。例如如下:

根据 Martin (1970: 59},解释的人的工作 对某人的某事“是填补他的听众之间的空白 关于某些现象的知识或信念,以及他认为是什么 实际情况”。

我想选择左括号后的大括号(应该是右括号),这样我就可以用它应该的右大括号替换它,而忽略其他大括号。

我已经尝试过这样的正则表达式模式,((?<=[a-zA-Z0-9\s])\}),但仍然选择了所有花括号。什么是正确的正则表达式模式来识别只选择左括号后的花括号?

【问题讨论】:

    标签: regex


    【解决方案1】:

    你可以使用

    (\([^(}]*)\}
    

    并替换为$1) 模式(或\1),具体取决于您使用搜索和替换的位置)。请参阅regex demo

    作为一种变体,在 PCRE/Onigmo 正则表达式中,您可以使用 \([^(}]*\K\} 正则表达式找到这些大括号,然后您可以只替换为 ) 字符。见this regex demo

    正则表达式详细信息

    • (\([^(}]*) - 第 1 组:(,然后是除 (} 之外的零个或多个字符
    • \} - 一个 } 字符。

    【讨论】:

      【解决方案2】:

      如果您想使用正向后视,您可以在字符类中添加一个量词,如果 is supported

      (?<=\([:a-zA-Z0-9\s]*)}
      

      模式匹配:

      • (?&lt;= 正面向后看,断言左边是什么
        • \(匹配(
        • [:a-zA-Z0-9\s]* 可选择重复字符类中列出的任何字符
      • ) 近距离观察
      • } 匹配结束卷曲

      Regex demo

      const regex = /(?<=\([:a-zA-Z0-9\s]*)}/g;
      const str = `Accord}ing to Martin (1970: 59}, the job of someone who explains something to someone "is to fill in the gap between his audience's knowledge or beliefs about some phenomena and what he takes to be the actual state of affairs".`;
      
      console.log(str.replace(regex, ")"));

      【讨论】:

        猜你喜欢
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多