web-dev-qa-db-fra.com

En boucle à travers python correspond aux expressions rationnelles

Cela doit être plus facile que ce que je rencontre. Mon problème est de tourner une chaîne qui ressemble à ceci:

ABC12DEF3G56HIJ7

dans

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

Et je ne peux pas, pour ma vie, concevoir un ensemble correct de boucles en utilisant l'appariement REGEX. Le noeud du problème est que le code doit être complètement général car je ne peux pas supposer combien de temps le [A-Z] _ fragments seront, ni combien de temps le [0-9] _ fragments seront.

Merci pour toute aide!

57
da5id

Python's re.findall devrait fonctionner pour vous.

Démo en direct

import re

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

for (letters, numbers) in re.findall(pattern, s):
    print(numbers, '*', letters)
97
Ray Toal

Il est préférable d'utiliser re.finditer si votre jeu de données est volumineux:

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)
44
Mithril