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

时间:2013-05-13 12:45:51

标签: python regex

我有一个类似

的正则表达式
(\d\d\d)(\d\d\d)(\.\d\d){0,1}

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

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

这是基于解析

的问题
  

HHMMSS

字符串,其中包含秒的可选小数部分(因此它变为

  

hhmmss.ss

)...我在问题中加了\d\d\d,因此很明显我正在谈论\d\d

1 个答案:

答案 0 :(得分:14)

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"