2014-12-23 3 views
3

В основном я пытаюсь найти серию последовательных повторяющихся паттернов с помощью питона с регулярным выражением:Matching последовательно повторил скобки с Python Regex

(X[0-9]+)+ 

Например, дать входную строку:

YYYX4X5Z3X2 

Получить список результатов:

["X4X5", "X2"] 

Однако я вместо того, чтобы получать:

["X5", "X2"] 

Я испытал регулярное выражение на regexpal и проверить, что это правильно, однако, из-за способа питона лечит «()» Я не могу получить желаемый результат. Может ли кто-нибудь посоветовать?

ответ

4

Превратите свой захват группы в группу, не захватывающую (?:...), вместо этого ...

>>> import re 
>>> re.findall(r'(?:X[0-9]+)+', 'YYYX4X5Z3X2') 
['X4X5', 'X2'] 

Другой пример:

>>> re.findall(r'(?:X[0-9]+)+', 'YYYX4X5Z3X2Z4X6X7X8Z5X9') 
['X4X5', 'X2', 'X6X7X8', 'X9'] 
3

изменить свой рисунок, как так

((?:X[0-9]+)+) 

Demo

(    # Capturing Group (1) 
    (?:   # Non Capturing Group 
    X   # "X" 
    [0-9]  # Character Class [0-9] 
    +   # (one or more)(greedy) 
)    # End of Non Capturing Group 
    +    # (one or more)(greedy) 
)    # End of Capturing Group (1) 
3

Вы должны дать в не захватывая группы (?:<pattern>) для первого шаблона:

((?:X[0-9]+)+)