我有这样的字符串
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')
答案 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', '', '+')]