ich hab es nicht hinbekommen, in einem Rutsch einen String sowohl zu validieren als auch in Häppchen zu zerhacken.
Wenn ich re.match nutze, dann finde ich in .groups() immer nur ein einziges Element (das zuletzt gefundene).
Wenn ich zB mit re.findAll rüberlaufe, dann merke ich nicht, wenn etwas verbotenes im string drin war.
Einfach nur aus Prinzip fuchst es mich, zweimal den ausdruck parsen zu müssen

Konkretes Beispiel:
Die Worte der zu validierenden Sprache bestehen aus einem 'n' oder 'd' gefolgt von einer Zahl. Es können beliebig viele Worte aneinander gereiht werden (zB: n1d2n5d9d7). Als Regex: '^([dn]\d)+$'
Jetzt möchte ich einerseits sicherstellen, dass ein Ausdruck nirgendwo die Grammatik verletzt, anderseits möchte ich die char-int Paare extrahieren.
Derzeit mach ich das in zwei Durchgängen:
Code: Alles auswählen
if not re.match(r'^([nd]\d)+$', expr):
raise SomeError
for x in re.findall(r'[nd]\d', expr):
print x
