【问题标题】:Adding quotes within brackets - regex在括号内添加引号 - 正则表达式
【发布时间】:2012-10-24 23:49:37
【问题描述】:

好的,所以我正在尝试使用我的文本编辑器(崇高文本)在正则表达式模式下进行查找和替换。我在多个文件中有数百个字符串,其中包含需要转换为 ['some_text'] 的 [some_text]。以下适用于匹配和替换不带引号的起始括号:

find:      \[(?!')
replace:   ['

但是,查找之前不带引号的右括号的相同逻辑似乎匹配所有右括号,即使是之前带引号的括号。有什么想法吗?

find:      (?!')\]
replace:   ']

【问题讨论】:

    标签: regex replace


    【解决方案1】:

    在第二种情况下,您需要使用lookbehind而不是lookahead:

    find:      (?<!')\]
    replace:   ']
    

    原因是前瞻(?!...) 看向正则表达式引擎当前位置的右侧。因此,如果您想匹配 ] 并在其前面执行前瞻,正则表达式引擎将检查 ] 本身,这(当然)不是 '

    另一方面,lookbehind 查看正则表达式引擎当前位置的左侧,这正是您想要的。

    请注意,在这两种情况下,环视都不会消耗任何字符!检查它们不会提高正则表达式引擎的位置。这就是环视的方向很重要的原因。

    您可以阅读有关外观和正则表达式引擎内部的更多详细信息here

    (顺便说一句,您通常不需要转义 ]。如果没有开头 [,它永远不会被误认为是元字符。)

    【讨论】:

    • ...或搜索 (?&lt;!')(?=\]) 并替换使用撇号 '
    • 那么我认为您甚至可以一口气完成所有操作:(?&lt;=\[)(?!')|(?&lt;!')(?=])
    • (也就是说,如果 sublime 不会像 notepad++ 那样替换零长度匹配项)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多