循环通过python正则表达式匹配

da5*_*5id 60 python regex nested-loops

这比我遇到的要容易.我的问题是转换一个看起来像这样的字符串:

ABC12DEF3G56HIJ7
Run Code Online (Sandbox Code Playgroud)

12 * ABC
3  * DEF
56 * G
7  * HIJ
Run Code Online (Sandbox Code Playgroud)

在我的生活中,我不能使用REGEX匹配设计一组正确的循环.问题的关键在于代码必须是完全通用的,因为我不能假设[A-Z]片段将存在多长时间,也不能假设片段有多长[0-9].

谢谢你的帮助!

Ray*_*oal 99

Python re.findall应该适合你.

现场演示

import re

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

for (letters, numbers) in re.findall(pattern, s):
    print(numbers, '*', letters)
Run Code Online (Sandbox Code Playgroud)


Mit*_*ril 50

如果数据集很大,最好使用re.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)
Run Code Online (Sandbox Code Playgroud)

  • 此方法的好处是让您可以按名称访问命名组,而不是按正则表达式中的位置(如果模式在正则表达式中移动,位置可能会发生变化。) (2认同)