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

时间:2016-06-03 12:03:39

标签: python regex

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

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

预期输出为:

"bbb"

然而,这是输出:

"bbb"ccc"

有人可以解释上述模式的错误吗?我用Google搜索并找到了正确的模式:

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

但是,我不明白为什么必须使用?

3 个答案:

答案 0 :(得分:3)

你应该使用负前瞻断言。我假设输入字符串中没有任何转义引号。

READ_SIG

答案 1 :(得分:3)

在你的正则表达式

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

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

你可以使用像这样的负向前瞻

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

只需更改

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

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

如果您想确保"b\"ccc"与字符串bb\"b\"ccc"

不匹配

答案 2 :(得分:2)

您可以使用:

pattern = r"[\"'][^\"']*[\"']"

https://regex101.com/r/dO0cA8/1

[^\"']*将匹配非"'

的所有内容