正则表达式有多个组?
问题内容:
我对在Python中返回多个组感到困惑。我的RegEx是这样的:
lun_q = 'Lun:\s*(\d+\s?)*'
我的弦是
s = '''Lun: 0 1 2 3 295 296 297 298'''`
我返回一个匹配的对象,然后想要查看组,但是所有这些都显示了最后一个数字(258):
r.groups()
(u'298',)
为什么不返回0,1,2,3,4
等组?
问题答案:
您的正则表达式仅包含一对括号(一个捕获组),因此您在匹配项中仅得到一个组。如果在捕获组(+
或*
)上使用重复运算符,则每次重复该组时,该组都会被“覆盖”,这意味着仅捕获最后一个匹配项。
在这里的示例中,最好.split()
结合使用,regex和:
lun_q = 'Lun:\s*(\d+(?:\s+\d+)*)'
s = '''Lun: 0 1 2 3 295 296 297 298'''
r = re.search(lun_q, s)
if r:
luns = r.group(1).split()
# optionally, also convert luns from strings to integers
luns = [int(lun) for lun in luns]