2013-05-13 2 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.ss

) ... я положил \d\d\d в вопрос, так что понятно о чем \d\d Im talk about.

+0

Было бы очень полезно, если вы можете предоставить некоторые вводные данные и ожидаемые выходные строки. –

ответ

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

+2

'{0,1}' обычно записывается как '?' – georg

+3

@ thg435, да. '{0,1}' и '?' Совпадают. Просто осталось, как было в вопросе – stalk

Смежные вопросы