提取字符串内出双引号

问题描述:

这只是为了学习的目的,我有下面的代码。如果我想提取只是'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' 
+0

我想' \“([^”] *)'当然也会这样做('group(1)')。 – gillyspy 2013-05-13 04:03:24