5 Stimmen

Muster, das mit einer benannten Gruppe verknüpft 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 trickigen Weg, das zu erreichen, ohne es "von Hand" über Regex-Suchen im Mustertext zu tun?

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   # Unterabgewichtung der einzelnen Gruppen
#print v.dump()
print v.data  # finde die Untergruppen und passen die IDs an

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