Das muss einfacher sein als das, was mir begegnet. Mein Problem ist das Drehen einer Zeichenfolge, die so aussieht:
ABC12DEF3G56HIJ7
in
12 * ABC
3 * DEF
56 * G
7 * HIJ
Und ich kann für mein ganzes Leben keinen korrekten Satz von Loops mit REGEX-Matching entwerfen. Der Kern des Problems ist, dass der Code vollständig allgemein sein muss, da ich nicht davon ausgehen kann, wie lang die [A-Z]
Fragmente sein werden und wie lang die [0-9]
Fragmente sein werden.
Vielen Dank für jede Hilfe!
python
regex
nested-loops
da5id
quelle
quelle
''.join("%s * %s\n" % (n, w) for w, n in re.findall(r'(?i)([a-z]+)(\d+)', input_string))
Antworten:
Pythons
re.findall
sollten für Sie funktionieren.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)
quelle
Es ist besser,
re.finditer
wenn Ihr Dataset groß ist, da dies den Speicherverbrauch verringert (findall()
geben Sie eine Liste aller Ergebnisse zurück undfinditer()
finden Sie sie nacheinander).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)
quelle
print m.group(2), '*', m.group(1)
der gewünschten Ausgabe des OP entsprechen. Ich glaube, dasm.group(0)
ist das "volle" Spiel - dh ABC12, DEF3, G56, HIJ7.findall
Holen Sie sich alle Ergebnisse zurück,finditer
erhalten Sie eins nach dem anderen.