Skip to main content
 首页 » 编程设计

python 正则表达式 : group of groups

2024年10月25日35www_RR

我有这样的字符串

s = 'MR1|L2-S1x'  

模式总是相同的:一个或两个字符,在 [|.+:x-] 中可选地后跟一个数字和一个分隔符。此模式可以重复 6 次。

所以匹配模式很明确。

p = r'([A-Z]+)(\d)?([|.+:x-]+)' 

但是如何让它把字符串匹配成一组呢?

更准确地说:现在我明白了

t=re.search(p,s) 
t.groups() 
('MR', '1', '|') 

不过,我想要的是

('MR', '1', '|'),('L', '2', '-'),('S', '1', 'x')  

请您参考如下方法:

import re 
tokens=[] 
subject = "MR1|L2-S1xZZ+" 
reobj = re.compile(r"([A-Z]{1,2})(\d?)([|.+:x-]?)") 
for match in reobj.finditer(subject): 
    tokens.append((match.group(1),match.group(2),match.group(3))) 
print(tokens) 

输出:

[('MR', '1', '|'), ('L', '2', '-'), ('S', '1', 'x'), ('ZZ', '', '+')]