python正则表达式:群组?

时间:2014-07-03 19:34:55

标签: python regex

我有这样的字符串

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') 

2 个答案:

答案 0 :(得分:1)

用户“未定义不是函数”(在注释中)是正确的。 使用findall获取所有匹配的组。

Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'MR1|L2-S1x'
>>> p = r'([A-Z]+)(\d)?([|.+:x-]+)'
>>> import re
>>> t = re.findall(p, s)
>>> t
[('MR', '1', '|'), ('L', '2', '-'), ('S', '1', 'x')]
>>>

答案 1 :(得分:1)

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', '', '+')]