为什么这种模式不匹配?

时间:2014-05-01 10:08:47

标签: python regex

使用此模式:

(?<=\(\\\\).*(?=\))

和此主题字符串:'(\\Drafts) "/" "&g0l6P3ux-"'

我希望匹配Drafts

但是,它不起作用。有人可以解释原因吗?

我在Python中使用re模块,以下是我所做的:

>>> pattern = re.compile("(?<=\(\\\\).*?(?=\\))")
>>> pattern.pattern
'(?<=\\(\\\\).*?(?=\\))'
>>> two
'(\\Drafts) "/" "&g0l6P3ux-"'
>>> match = pattern.search(two)
>>> match
<_sre.SRE_Match object at 0x1096e45e0>
>>> match.groups()
()
>>> match.group(0)
'Drafts'
>>> 

我的问题是为什么groups除了group得到正确答案之外什么也得不到?

1 个答案:

答案 0 :(得分:0)

match.groups()为空,因为您的模式未定义任何捕获组。 match.group(0)是完全匹配,而match.group(1)是第一个捕获组(如果有的话)。

为了提高可读性,您应该将正则表达式模式表示为原始字符串。你的可以写成

r"(?<=\(\\).*?(?=\))"

要将其分解,文字(\,然后是.*?,最后是文字)的预测。