81

这必须比我遇到的更容易。我的问题是转动一个看起来像这样的字符串:

ABC12DEF3G56HIJ7

进入

12 * ABC
3  * DEF
56 * G
7  * HIJ

而且我一辈子都无法使用 REGEX 匹配设计一组正确的循环。问题的症结在于代码必须是完全通用的,因为我无法假设[A-Z]片段会有多长,也无法假设片段会有多长[0-9]

感谢您的任何帮助!

4

2 回答 2

131

Pythonre.findall应该适合你。

现场演示

import re

s = "ABC12DEF3G56HIJ7"
pattern = re.compile(r'([A-Z]+)([0-9]+)')

for (letters, numbers) in re.findall(pattern, s):
    print(numbers, '*', letters)
于 2012-10-13T05:20:19.737 回答
77

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)
于 2016-07-28T01:11:31.867 回答