好的,所以我尝试使用我的文本编辑器(sublime text)在正则表达式模式下进行查找和替换。我在多个文件中有数百个字符串,其中包含需要转换为 ['some_text'] 的 [some_text]。以下内容适用于匹配和替换后面不带引号的起始括号:
find: \[(?!')
replace: ['
但是,查找之前不带引号的右括号的相同逻辑似乎匹配所有右括号,甚至是那些之前带引号的右括号。有什么想法吗?
find: (?!')\]
replace: ']
最佳答案
在第二种情况下,您需要使用后视而不是前视:
find: (?<!')\]
replace: ']
原因是前瞻 (?!...)
会查看正则表达式引擎当前位置的右侧。因此,如果您想匹配 ]
并在其前面执行前瞻,正则表达式引擎将根据 ]
本身进行检查,这(当然)不是'
。
另一方面,lookbehind 会查看正则表达式引擎当前位置的左侧,这正是您想要的。
请注意,在这两种情况下,环视都不会消耗任何字符!检查它们不会提升正则表达式引擎的位置。这就是环视方向相关的原因。
您可以阅读有关环视和正则表达式引擎内部结构的更多详细信息 here .
(顺便说一句,您通常不需要转义 ]
。如果没有开头 [
,它永远不会被误认为是元字符。)
关于regex - 在括号内添加引号 - 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059593/