好的,所以我正在尝试使用我的文本编辑器(崇高文本)在正则表达式模式下进行查找和替换。我在多个文件中有数百个字符串,其中包含需要转换为 ['some_text'] 的 [some_text]。以下适用于匹配和替换不带引号的起始括号:
find: \[(?!')
replace: ['
但是,查找之前不带引号的右括号的相同逻辑似乎匹配所有右括号,即使是之前带引号的括号。有任何想法吗?
find: (?!')\]
replace: ']
在第二种情况下,您需要使用lookbehind而不是lookahead:
find: (?<!')\]
replace: ']
原因是向前看是(?!...)
看正则表达式引擎当前位置的右侧。因此,如果您想匹配 a]
并在其前面执行前瞻,则正则表达式引擎将根据]
自身进行检查,这(当然)不是'
.
另一方面,lookbehind 查看正则表达式引擎当前位置的左侧,这正是您想要的。
请注意,在这两种情况下,环视都不会消耗任何字符!检查它们不会提高正则表达式引擎的位置。这就是为什么环视的方向是相关的。
您可以在此处阅读有关外观和正则表达式引擎内部的更多详细信息。
(顺便说一句,您通常不需要 escape ]
。如果没有开头[
,它永远不会被误认为是元字符。)