Zapętlanie poprzez dopasowania regex Pythona

To musi być łatwiejsze niż to, na co wpadam. Mój problem polega na przekręceniu sznurka, który wygląda tak:

ABC12DEF3G56HIJ7

Do

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

I nie mogę, na całe życie, zaprojektować poprawnego zestawu pętli za pomocą dopasowania REGEX. Sednem sprawy jest to, że kod musi być całkowicie ogólny, ponieważ nie mogę zakładać, jak długo będą [A-Z] fragmenty, ani jak długo będą [0-9] fragmenty.

Dziękuję za wszelką pomoc!

Author: Tim Pietzcker, 2012-10-13

2 answers

Python re.findall powinien działać dla Ciebie.

Live demo

import re

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

for (letters, numbers) in re.findall(pattern, s):
    print(numbers, '*', letters)
 82
Author: Ray Toal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 17:14:08

Lepiej użyć re.finditer Jeśli zbiór danych jest duży:

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)
 28
Author: Mithril,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-08 03:12:11