用双引号提取字符串中的字符串

时间:2013-05-12 23:18:40

标签: python regex

这仅用于学习目的,我有以下代码。如果我想用双引号提取'abcbc'怎么办?我也尝试re.search(r'\A\"(.*?)\"',a).group()注意到改变。

>>> a = "\"abcbc\" lol"
>>> re.search(r'\A"(.*?)"',a).group()
'"abcbc"'

如果我将模式更改为'\A"(.*?)',这应该只是在双引号后返回所有内容?但它给出了以下内容。有什么我错的吗?

>>> re.search(r'\A"(.*?)',a).group()
'"'

1 个答案:

答案 0 :(得分:3)

您正在捕获组中的内容,但是通过不带参数调用group(),您将返回整个匹配(组0),而不是您想要的组(即组1)。致电.group(1)以返回第一组,其中包含您想要的内容。

>>> a = "\"abcbc\" lol"
>>> re.search(r'\A"(.*?)"',a).group(1)
'abcbc'

至于你的第二个问题,*?是非贪婪的:它会尽可能少地匹配。由于*允许匹配零,*?将匹配任何内容,如果它可以 - 并且它可以,因为你之后没有任何东西强制它匹配到某一点。使用它之后的引用,它将匹配尽可能少的匹配下一个引号,这迫使它继续消耗文本,直到它达到关闭引用。但没有引用,它只是没有匹配,因为它没有理由继续匹配。

如果你使用非贪婪的,它会在双引号之后确实匹配所有内容--- 所有,直到最后一行:

>>> re.search(r'\A"(.*)',a).group()
'"abcbc" lol'