Python中如何使用多组Reg表达式?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

我对用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组等等?

提问于
用户回答回答于

regex只包含一对括号(一个捕获组),因此在您的匹配中只能得到一个组。如果在捕获组上使用重复操作符(或),每次重复该组时,该组都会被“覆盖”,这意味着只捕获最后一个匹配。

在这里的例子中,您最好使用.split(),与正则表达式相结合:

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]
用户回答回答于

没有正则表达式更容易。

>>> s = '''Lun: 0 1 2 3 295 296 297 298'''
>>> if "Lun: " in s:
...     items = s.replace("Lun: ","").split()
...     for n in items:
...        if n.isdigit():
...           print n
...
0
1
2
3
295
296
297
298

扫码关注云+社区

领取腾讯云代金券