reguläre ausdrücke url problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
skymuss

---------------------
Zuletzt geändert von skymuss am Samstag 12. Juni 2010, 10:51, insgesamt 1-mal geändert.
BlackJack

Die URL fängt ja nun mal auch nicht mit einem Ausrufezeichen an. Das sieht so aus, als wenn Du da versuchst eine andere Sprache in Python zu verwenden. Da wäre das '!' wohl Teil der Syntax um einen regulären Ausdruck anzuzeigen, was aber überflüssig ist, wenn es eine Funktion gibt, die eine Zeichenkette als regulären Ausdruck erwartet. Und Optionen werden auch anders gesetzt (falls ich das letzte 'i' richtig interpretiere). Lies mal die Doku.

PS: Im Ausdruck selbst kommt mir 'w{2,4}' ein wenig eigenartig vor: 2 bis 4 'w's nacheinander sollen da gematcht werden!?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:PS: Im Ausdruck selbst kommt mir 'w{2,4}' ein wenig eigenartig vor: 2 bis 4 'w's nacheinander sollen da gematcht werden!?
Da ist wohl ``\w{2,4}`` gemeint, was aber an .museum oder .travel scheitert. Es würde wohl auch an den etwas populäreren .co.uk oder .ac.at scheitern. Letztendlich ist es eine schlechte Idee URLs mit Regulären Ausdrücken matchen zu wollen, dafür sind sie einfach zu komplex.

Edit: Von den IDNA-TLDs mal ganz zu schweigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
epsilon
User
Beiträge: 71
Registriert: Freitag 20. Juni 2008, 19:48

Für solche Aufgaben sucht man sich besser ein fertiges Modul, was bereits seine Kinderkrankheiten überstanden hat.

Zu deinem Regex (zusätzlich, zu dem was schon gesagt wurde):
^(http://)
Wenn du später sowieso nur match() verwenden willst, brauchst du kein '^', da der Text bei match() immer von Anfang an passen muss.
(http://)
Du hast 'https://' vergessen (Falls es dir nur um Hypertext-Links geht, ansonsten noch ftp, usw.).
(www.)?
'www' ist nur eine Subdomain und Subdomains können auch komplett anders heißen (stores.ebay.de z.B.).
([a-z0-9-]{3,})
es gibt auch Domains mit zwei Buchstaben: http://www.ge.com/. Außerdem darf eine Domain nicht mit Bindestrich anfangen oder aufhören. An IDNA-Domains ("Umlautdomains") hast du vermutlich auch nicht gedacht ;)
.w{2,4}
Der Punkt wird hier nicht als Punkt ausgewertet, sondern als "jedes beliebige Zeichen, außer new line" - Du müsstest also '\.' schreiben, damit es nur auf einen Punkt passt.
(/)?
hören bei dir alle URLs nach der tld bzw. tld + Slash auf? Ich dachte, da kann noch ein Pfad, Parameter, usw. kommen ;)

Außerdem würde ich die URL besser mit urlparse (std lib) zerteilen, wodurch du es dir sparen könntest, die Teile mit den Klammern einzufangen.

Edit:

btw.: The regular expression required to validate an email address according to the respective RFCs

Und selbst bei dem Regex muss man vorher noch eventuell vorhandene Kommentare entfernen
Antworten