2015-05-06 1 views
3

У меня есть строка с буквенно-цифровыми значениями. Числовые значения являются переменными. Алфавитные значения всегда 'abc' и 'ghi', но я не знаю их порядка. Числовые значения всегда появляются после буквенных значений.Вложенное регулярное выражение

Правильные примеры такого рода строки являются:

a = 'abc10ghi1450' 
b = 'abc11ghi9285' 
c = 'ghi1abc9' 
... 

Теперь я хочу, чтобы сохранить номера после 'abc' и 'ghi' в соответствующих переменных и то, что я делаю это:

>>> import re 
>>> string = 'abc10ghi44' 
>>> abc = re.search('abc\d+', string).group(0) 
>>> abc = re.search('\d+', abc).group(0) 
>>> ghi = re.search('ghi\d+', string).group(0) 
>>> ghi = re.search('\d+', ghi).group(0) 
>>> print abc, ghi 
10, 44 

Для каждая переменная Я использую 2 регулярных выражения, и мне это не нравится; есть ли более разумный способ сделать то же самое?

ответ

5

Да, сделать захватывая группу вокруг цифр и использовать это:

>>> import re 
>>> string = 'abc10ghi44' 
>>> re.search('abc(\d+)', string).group(1) 
'10' 

Примечание круглые скобки вокруг \d+ и 1 в group вызова.


В качестве альтернативы, использовать положительный : просмотра назад

>>> re.search('(?<=abc)\d+', string).group(0) 
'10'