[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