如何获得并不总是存在的捕获组?

NoS*_*tAl 16 python regex

我有一个类似的正则表达式

(\d\d\d)(\d\d\d)(\.\d\d){0,1}
Run Code Online (Sandbox Code Playgroud)

当它匹配时,我可以很容易地得到前两组,但我如何检查第三组是否发生了0或1次.

另一个小问题:在(\.\d\d)我唯一关心的\d\d部分,任何其他方式告诉正则表达式\.\d\d 需要出现0或1次,但我想只捕获\d\d部分?

这是基于解析a的问题

HHMMSS

具有可选小数部分的字符串(因此它变为

hhmmss.ss

)...我提出\d\d\d了这个问题,所以我很清楚\d\d我在说什么.

sta*_*alk 15

import re

value = "123456.33"

regex = re.search("^(\d\d\d)(\d\d\d)(?:\.(\d\d)){0,1}$", value)

if regex:
    print regex.group(1)
    print regex.group(2)
    if regex.group(3) is None:
        print regex.group(3)
    else:
        print "3rd group not found"
else:
    print "value don't match regex"
Run Code Online (Sandbox Code Playgroud)

  • 我想指出,找不到`regex.group(3)是None`. (5认同)
  • @ thg435,是的.`{0,1}`和`?`是一样的.只是保持原样 (3认同)
  • `{0,1}`通常写成`?` (2认同)