提取字符串内出双引号
问题描述:
这只是为了学习的目的,我有下面的代码。如果我想提取只是'abcbc'
与双引号?我也试过re.search(r'\A\"(.*?)\"',a).group()
注意到变化。提取字符串内出双引号
>>> a = "\"abcbc\" lol"
>>> re.search(r'\A"(.*?)"',a).group()
'"abcbc"'
如果我将模式更改为'\A"(.*?)'
这应该只是在双引号后返回所有内容?但它给出了以下内容。有什么我错了吗?
>>> re.search(r'\A"(.*?)',a).group()
'"'
答
您捕捉你在一组想要的东西,但通过调用group()
不带参数,你正在返回整个匹配(组0),而不是你想要的组(这是第1组)。致电.group(1)
返回第一组,它具有你想要的。
>>> a = "\"abcbc\" lol"
>>> re.search(r'\A"(.*?)"',a).group(1)
'abcbc'
关于你的第二个问题,*?
是非贪婪的:它会少,因为它可以匹配。由于*
允许匹配零,所以*?
将不匹配,如果它可以---也可以,因为你没有任何东西来强制匹配到某个点。随着后面的报价,它将匹配尽可能少的匹配下一个报价,这将迫使它继续消耗文本,直到它达到近似报价。但没有引用,它只是没有匹配,因为它没有理由继续匹配。
如果使用非贪婪的一个,它会的确是一个双引号后的双引号匹配之后一切--- 一切,到行的末尾:
>>> re.search(r'\A"(.*)',a).group()
'"abcbc" lol'
我想' \“([^”] *)'当然也会这样做('group(1)')。 – gillyspy 2013-05-13 04:03:24