Skip to main content
 首页 » 编程设计

python之使用 python 3 正则表达式匹配双引号中的字符串

2025年05月04日20emanlee

我想匹配包含在一对单引号或双引号中的字符串。我这样写了一个正则表达式模式:

pattern = r"([\"\'])[^\1]*\1" 
mytext = '"bbb"ccc"ddd' 
re.match(pattern, mytext).group() 

预期的输出是:

"bbb" 

但是,这是输出:

"bbb"ccc" 

有人能解释一下上面的模式有什么问题吗?我用谷歌搜索,发现正确的模式是:

pattern = r"([\"\'])[^\1]*?\1" 

但是,我不明白为什么一定要用?。

请您参考如下方法:

在你的正则表达式中

([\"'])[^\1]*\1 

字符类 仅用于匹配一个字符。所以您对 [^\1] 的使用是不正确的。想一想,如果第一个捕获组中有多个字符会发生什么情况。

你可以像这样使用负前瞻

(["'])((?!\1).)*\1 

或只是交替

(["'])(?:[^"'\\]+|\\.)*\1 

或

(?<!\\)(["'])(?:[^"'\\]+|\\.)*\1 

如果你想确保 "b\"ccc" 不匹配字符串 bb\"b\"ccc"