2013-05-13 44 views
13

我有一个正则表达式像如何获得一个并不总是存在的捕获组?

(\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

+0

如果您可以提供一些示例输入和预期的输出字符串,那将是非常有帮助的。 – 2013-05-13 12:50:32

回答

12
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): 
     print regex.group(3) 
    else: 
     print "3rd group not found" 
else: 
    print "value don't match regex" 
+0

aaah noncapturing group ... tnx:D – NoSenseEtAl 2013-05-13 12:59:50

+2

'{0,1}'通常写成'?' – georg 2013-05-13 13:00:43

+3

@ thg435,是的。 “{0,1}”和“?”是相同的。只是保持它的问题 – stalk 2013-05-13 13:02:17