5 Stimmen

Muster, das einer benannten Gruppe zugeordnet ist

Der folgende Code gibt alle benannten Gruppen zurück, die in einem Muster verwendet werden.

import re

pattern = r"(?Pdef (?P\w+)\s*\((.*?)\):)|(?P\w+)"
regex   = re.compile(pattern)

for name in sorted(
    regex.groupindex,
    key = regex.groupindex.get
):
    print(name)

Hier ist die entsprechende Ausgabe.

DEF_FUNC
NAME_FUNC
OTHERS

Ich würde auch gerne die entsprechenden Muster haben, um die folgende Ausgabe zu erhalten.

DEF_FUNC  --> def (?P\w+)\s*\((.*?)\)
NAME_FUNC --> \w+
OTHERS    --> \w+

Gibt es einen cleveren Weg, das zu tun, ohne es manuell über Regex-Suchen im Mustertext zu machen?

1voto

perreal Punkte 89574

Sie können sre_parse überprüfen:

import re, sre_parse
pattern = r"(?Pdef (?P\w+)\s*\((.*?)\):)|(?P\w+)"
v = sre_parse.parse(pattern)
print v.pattern.groupdict   # Unter-Muster-ID jeder Gruppe
#print v.dump()
print v.data  # finde die Untergruppen und die Übereinstimmungs-IDs

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X