正则表达式,用于分层字符串中的多个匹配

时间:2014-10-16 04:27:44

标签: python regex class-hierarchy

我想将分层字符串提取为多个匹配结果。

例如:

   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

解析这个有什么好主意吗?我被困住了。

2 个答案:

答案 0 :(得分: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 :(得分: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')

你可以简单地反转元组以获得长度顺序的匹配。