在|的两侧只捕获两组中的一组

时间:2016-06-05 19:48:52

标签: python regex python-3.x

我需要在双引号或单引号内捕捉一些内容,从逻辑上讲,我这样做:

>>> re.match( '"(\d+)"|\'(\d+)\'', "'123'" ).groups()
(None, '123')

但由于某种原因,两组被退回,为什么?..

2 个答案:

答案 0 :(得分:1)

s1 = '..."123"...'
s2 = "...'123'..."
s3 = """...'123"..."""

>>> re.findall(r'(\'\d+\'|"\d+")', s1)
['"123"']

>>> re.findall(r'(\'\d+\'|"\d+")', s2)
["'123'"]

>>> re.findall(r'(\'\d+\'|"\d+")', s3)
[]

答案 1 :(得分:0)

因为你的正则表达式包含两个组,并且groups()返回" 一个包含匹配的所有子组的元组,从1到多个组都在模式中&# 34; (https://docs.python.org/3/library/re.html#re.match.groups)。