2014-10-16 2 views
0

Я хотел бы извлечь иерархическую строку в результат множественного соответствия.Регулярное выражение для множественного соответствия в иерархической строке

Например:

F   21   W   2121   /02 

[A-Z]{1} [0-9]{1,n} [A-Z]{1} [0-9]{1,n} /{1}[0-9]{1,n} 

Результат:

F21W2121/02 -> F, F21, F21W, F21W2121, F21W2121/02 

G06Q30/00 -> G, G06, G06Q, G06Q30, G06Q30/00 

ли любая хорошая идея, чтобы разобрать это? Я застрял.

ответ

1

Я думаю, что вы хотите что-то вроде этого,

^((((([A-Z])\d+)[A-Z])\d+)/\d+)$ 

DEMO

>>> import re 
>>> s = "F21W2121/02" 
>>> re.findall(r'^((((([A-Z])\d+)[A-Z])\d+)/\d+)$', s) 
[('F21W2121/02', 'F21W2121', 'F21W', 'F21', 'F')] 
>>> re.findall(r'^((((([A-Z])\d+)[A-Z])\d+)/\d+)$', "G06Q30/00") 
[('G06Q30/00', 'G06Q30', 'G06Q', 'G06', 'G')] 
+1

Я думаю, что цифры являются переменными, '[0-9] {1, n}' в исходном шаблоне. –

+0

updated ......... –

1

Если меня не хватает чего-то:

>>> import re 
>>> ptrn = '((((([A-Z])[0-9]+)[A-Z])[0-9]+)/[0-9]+)' 
>>> re.match(ptrn, 'G06Q30/00').groups() 
('G06Q30/00', 'G06Q30', 'G06Q', 'G06', 'G') 
>>> re.match(ptrn, 'F21W2121/02').groups() 
('F21W2121/02', 'F21W2121', 'F21W', 'F21', 'F') 

Вы можете просто обратный кортеж, чтобы получить матчи в порядке длины.

+1

Отбросьте все '{1}' и поверните '{1,}' на '+' – nhahtdh