[Python-de] Regulärer Ausdrücke
Florian Fredegar Haftmann
fredegar at haftmann-online.de
Sam Jan 3 16:27:19 CET 2004
Hi!
Stefan J. Betz schrieb:
> aber dennoch frage ich mich warum die RE:
> "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
> nicht funktioniert
> aber die RE:
> "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
> funktioniert einwandrei!
> spielt das "erfassen"
> von Stringanfang und Stringende wirklich eine so große Rolle?
Oh ja! Mit dem ersten Ausdruck sagst du ja: "dahinter darf kommen, was will";
also ist "123.234.123.4365643756439876536549" gültig, weil bis ."436" der
reguläre Ausdruck abgearbeitet ist und der Rest somit egal; mit dem "$" forderst
du: "wenn der Ausruck diese Stelle erreicht hat, erwarte ich das Zeilenende".
Das "^" kannst du weglassen, da du .match und nicht .search verwendest (lies
ggf. dir den Unterschied zwischen den beiden Methoden und das Zusammenspiel mit
"^" im Python-Manual durch).
Du kannst natürlich auch die IP extrahieren:
ipreg = re.compile(R'([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})')
ipmatch = ipreg.match(...)
print ipmatch.group(1)
(ausprobieren!)
Was sinniger ist, hängt von Gesamtzusammenhang ab.
Dir sollte aber klar sein, dass bei beiden Ausdrücken so etwas wie
"999.999.999.000" eine gültige IP ist.
> mfg
ffh