Die Funktion .groups()
gibt die Ergebnisse der Erfassungsgruppen eines übereinstimmenden regulären Ausdrucks zurück, die im Ausdruck durch (<expression>)
gekennzeichnet sind.
In Ihrem Ausdruck [*]{2}\s+server.*NXDOMAIN
sind in ()
keine Unterausdrücke enthalten, die eine Erfassungsgruppe erstellen würden. Daher ist .groups()
immer leer, unabhängig davon, ob Sie positiv auf eine Übereinstimmung in Ihrer Zeichenfolge getestet haben, weil Sie keine Erfassungsgruppen in Ihrer RegEx definiert haben. Das andere Problem ist, dass Sie bei Ihrem Anruf an re.match()
den Ausdruck angeben, mit dem Sie testen möchten, aber Sie übergeben nicht die Zeichenfolge, die Sie testen möchten ... Das Format des Anrufs lautet re.match(<expression>, <string>)
Wenn Sie wirklich erfassen Gruppen verwenden möchten Sie Ihren Ausdruck in ()
umgeben kann, und tun ...
match = re.match(r'([*]{2}\s+server.*NXDOMAIN)', '** server can\'t find mywebdomain.com: NXDOMAIN')
print(match.groups())
# ("** server can't find mywebdomain.com: NXDOMAIN",)
Dies führt eine tuple
Ihrer Erfassungsgruppe Ergebnisse.
Die andere Option ist Ihren Ausdruck zu halten wie es ist, und stattdessen die re.findall
Funktion benutzen, um Ihr Spiel zu bekommen ...
result = re.findall(r'[*]{2}\s+server.*NXDOMAIN', '** server can\'t find mywebdomain.com: NXDOMAIN')
print(result)
# ["** server can't find mywebdomain.com: NXDOMAIN"]
... und es gibt einen Array mit allen im Test gefundenen Treffern Zeichenfolge.
Ist 'NXDOMA>' ein Tippfehler? Deine Regex wird nicht mit dem Ausdruck übereinstimmen, der 'NXDOMAIN' hat –
' match = re.match ('[*] {2} \ s + server. * NXDOMAIN') '- wo ist ein zweites Argument? – Dmitry
Da es nichts passt – quikst3r