reguläre ausdrücke url problem
---------------------
Zuletzt geändert von skymuss am Samstag 12. Juni 2010, 10:51, insgesamt 1-mal geändert.
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!?
PS: Im Ausdruck selbst kommt mir 'w{2,4}' ein wenig eigenartig vor: 2 bis 4 'w's nacheinander sollen da gematcht werden!?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.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!?
Edit: Von den IDNA-TLDs mal ganz zu schweigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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):
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
Zu deinem Regex (zusätzlich, zu dem was schon gesagt wurde):
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.).(http://)
'www' ist nur eine Subdomain und Subdomains können auch komplett anders heißen (stores.ebay.de z.B.).(www.)?
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([a-z0-9-]{3,})
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..w{2,4}
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