这必须比我所遇到的要容易。我的问题是变成一个看起来像这样的字符串:
ABC12DEF3G56HIJ7
进入
12 * ABC
3 * DEF
56 * G
7 * HIJ
而且,我一生无法使用REGEX匹配设计正确的循环集。问题的症结在于代码必须是完全通用的,因为我无法假设[A-Z]
片段将有多长时间,[0-9]
片段也将有多长时间。
感谢您的协助!
Answers:
re.finditer
如果您的数据集很大,则最好使用它,因为这样可以减少内存消耗(findall()
返回所有结果的列表,finditer()
逐一找到它们)。
import re
s = "ABC12DEF3G56HIJ7"
pattern = re.compile(r'([A-Z]+)([0-9]+)')
for m in re.finditer(pattern, s):
print m.group(2), '*', m.group(1)
print m.group(2), '*', m.group(1)
适合OP的期望输出。我认为这m.group(0)
是“完全”比赛-即ABC12,DEF3,G56,HIJ7。
findall
得到所有结果,finditer
一一得到。
''.join("%s * %s\n" % (n, w) for w, n in re.findall(r'(?i)([a-z]+)(\d+)', input_string))