-2

我有一个字符串,必须提取。问题是我无法在重复中描述重复。所以这里是代码:

f = "Makimak-cg_mk_Mokarmi"
pattern = "([A-Za-z][A-Za-z0-9]+)((?:[-_]([a-z]{2}))+)"
mO = re.match(pattern, f)
print mO.groups()

结果将是:

('Makimak', '-cg_mk', 'mk')

但我想得到这样的元组:

('Makimak', '-cg_mk', 'cg', 'mk')

所以有一个组“-cg_mk”,其中包括两个字符模式的重复。但没有这样的事情:

[a-z]{2}+

结果的组只返回此处表达的重复的最后一部分:

([a-z]{2})

我的想法是应该有一个像这样的“+”:

([a-z]{2})+

它给出了相同的结果。生成了匹配对象,只是我无法获得我想要的组。

4

1 回答 1

0

您可能需要分两步执行此操作:

>>> f = "Makimak-cg_mk_Mokarmi"
>>> pattern = "([A-Za-z][A-Za-z0-9]+)((?:[-_][a-z]{2})+)"
>>> mO = re.match(pattern, f)
>>> print mO.groups() + tuple(re.split('[-_]', mO.group(2))[1:])
('Makimak', '-cg_mk', 'cg', 'mk')

这只是捕获组('Makimak', '-cg_mk'),然后将其与在出现-or时拆分第二组的结果相结合_

如果您始终知道两个字符模式的确切数量,则可以通过前瞻来完成此操作,但似乎事先并不知道,否则您不需要重复。

于 2013-02-12T17:26:36.327 回答