Gibt es so etwas wie ein &| bei Regex??

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 18. Dezember 2006, 18:53

Halli Hallo Halöchen! :)

Ich hab ma ne Frage...

und zwar bin ich gerade dabei wieder einmal ein wenig mit Regex rumzuspielen.
Nun frage ich mich. Gibt es so etwas wie ein &| ?

Hier ein Beispiel:

Ich habe folgende Regex:

Code: Alles auswählen

#link\[(http://|www.)?[a-zA-Z0-9-_\/\\:]*(\.[a-z]{2})\s.*\]
Der trifft auch bisher zuverlässig auf alles, was ich will... --> ob verbesserungswürdig würde ich gern erstma hinten ranschieben... is nur zusammengeschmissen ;)

Jedoch gibt es bei einer URL die Möglichkeit, das '' www. '' und '' http:// '' gleichzeitig vorkommen.
Wie müsste ich das abändern, damit er das auch findet?
Da wäre doch so ein '' &| '' net schlecht :D gibet so etwas?
Oder muss ich wirklich schreiben:

Code: Alles auswählen

#link\[(http://|www.|http://www.)?
wobei ich mir hier auch net sicher bin, ob er das einwanfrei findet ;)
finden auf jedenfall... aba was er da intern so macht - obs da Probleme gibt :D

Habt ihr da ein paar Tipps?

Herzlichen Dank!

MfG EnTeQuAk
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 18. Dezember 2006, 19:38

Wenn du URLs mehr oder weniger korrekt validieren, musst du einfach nur diesen Regulären Ausdruck für Pythons SRE aufbereiten ;)

Passender Thread dazu im Rubyforum.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Montag 18. Dezember 2006, 20:03

EnTeQuAk hat geschrieben: Nun frage ich mich. Gibt es so etwas wie ein &| ?

Hier ein Beispiel:

Ich habe folgende Regex:

Code: Alles auswählen

#link\[(http://|www.)?[a-zA-Z0-9-_\/\\:]*(\.[a-z]{2})\s.*\]
Der trifft auch bisher zuverlässig auf alles, was ich will... --> ob verbesserungswürdig würde ich gern erstma hinten ranschieben... is nur zusammengeschmissen ;)

Jedoch gibt es bei einer URL die Möglichkeit, das '' www. '' und '' http:// '' gleichzeitig vorkommen.
Wie müsste ich das abändern, damit er das auch findet?
Wenn beides optional sein kann:

(http://)?(www\.)?
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 18. Dezember 2006, 20:30

BlackJack hat geschrieben: Wenn beides optional sein kann:

(http://)?(www\.)?
Das wäre eine Idee :) Herzlichen Dank! :)
Leonidas hat geschrieben: Wenn du URLs mehr oder weniger korrekt validieren, musst du einfach nur diesen Regulären Ausdruck für Pythons SRE aufbereiten
WoW ! :)

Ich glaube, man kann es auch einfach nur übertreiben... *grml*... das geht doch aber bestimmt kürzer oder? :D

Na Egal... ich bastel erstmal nur etwas herum... was am Ende dabei herauskommt ist die andere Frage.
Verbessern kann man alles später immerr noch :D


Danke nochmal an beide!

Nun weiß ich, wies richtig geht und ich weiß, wie verrückt einige Leute sind - ohne jmd beleidigen zu wollen -.

MfG EnTeQuAk

EDIT:

ich habe mal über den Post von Leonidas nachgedacht...
Muss man für die "gute" erkennung von URLs wirklich so ne Lange Syntax nehmen?
Eigentlich benötigt man doch wirklich nur die "Vorzeichen"
http(s)://
www.
dann den Link text ansich... da benötigt man doch nur eine Menge aus allen "benutzbaren" Zeichen, die in URLs verwendet werden dürfen.
Nun nur noch das "ende" treffen. Also einen Punkt und zwei buchstaben. Bei denen noch im späteren Verlauf beachte, das URLs nur kleingeschriebene Zeichen enthalten dürfen.... fertig. Oder liege ich da halbwegs falsch?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 18. Dezember 2006, 20:49

EnTeQuAk hat geschrieben:Ich glaube, man kann es auch einfach nur übertreiben... *grml*... das geht doch aber bestimmt kürzer oder? :D
Um alle URLs mit einer großen Warscheinlichkeit richtig aus einem Fließtext zu extrachieren. Ich fürchte dass ist nicht ganz trivial.
EnTeQuAk hat geschrieben:ich habe mal über den Post von Leonidas nachgedacht...
Muss man für die "gute" erkennung von URLs wirklich so ne Lange Syntax nehmen?
Eigentlich benötigt man doch wirklich nur die "Vorzeichen"
http(s)://
www.
dann den Link text ansich... da benötigt man doch nur eine Menge aus allen "benutzbaren" Zeichen, die in URLs verwendet werden dürfen.
Nun nur noch das "ende" treffen. Also einen Punkt und zwei buchstaben. Bei denen noch im späteren Verlauf beachte, das URLs nur kleingeschriebene Zeichen enthalten dürfen.... fertig. Oder liege ich da halbwegs falsch?
Nein, denn URLs so wie sie in zum Beispiel Foren gepostet werden, dürfen gerne mal auch ohne www anfangen, zum beispiel django.benitum.de/sorter/ ist als URL gedacht, wird aber nicht als solche erkannt. Noch dazu kann man http:// auch durch ftp:// ersetzen oder es gibt auch Adressen ohne Doppelslashes wie xmpp:. Verkompliziert wird das noch durch URLs wie http://www.python-forum.de./index.html in denen explizit noch der DNS-Root angegeben sind, ebenso ist http://www.python-forum.de/hallo,welt eine gültige URL, Kommas sind in URLs zugelassen. Nicht zu vergessen die Möglichkeit Leerzeichen in URLs zu machen. Das Problem ist weniger der Anfang der URL sondern eher ihr Ende.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 18. Dezember 2006, 21:10

Nicht zu vergessen die Möglichkeit Leerzeichen in URLs zu machen.
Das wäre mir neu ;) Aber gut... ich lass mich gerne belehren.

Hmm... wie ich sehe... da gibt es doch eine gaaaanze Menge, was es zu beachten gibt.
Hier zu mal noch ein paar Ideen.

Denn :) EnTeQuAk wills wissen! :D (hieß ma Willi - in Fernsehen aba egal!)

So ich hab mir ma weiterhin Gedanken gemacht:
Nein, denn URLs so wie sie in zum Beispiel Foren gepostet werden, dürfen gerne mal auch ohne www anfangen, zum beispiel django.benitum.de/sorter/ ist als URL gedacht, wird aber nicht als solche erkannt.
hmm... wenn man solch "extrem" sachen mit einbauen möchte... nun ja...
oder es gibt auch Adressen ohne Doppelslashes wie xmpp:
Ist mir auch wieder neu... mensch - wie viel man hier dazu lernen kann :D
Wäre aber z.B. ftp: is glaub ich auch erlaubt und wird eingesetzt - oder?
Kommas sind in URLs zugelassen
Muss ich nicht erwähnen, das das auch wieder neu für mich ist :)
Das Problem ist weniger der Anfang der URL sondern eher ihr Ende.
Ich sehe schon... Aber ich werde es mal trotzdem versuchen... wäre doch schade, wenn ich meinen Urlaub mit anderen Sachen verschwenden würde :D

vllt. können wir ja ma nen kleinen "Wettbewerb" machen --> wer den kürzesten und besten Regex bastelt, was URLs betrifft. Wäre bestimmt lustig spätestens, wenn man das alles ins Wiki packt.

MfG EnTeQuAk

EDIT:
ich habe gerade gesehen, das man auch Sachen wie:
http://de.wikipedia.org/wiki/Top-Level-Domain
beachten muss... denn da ist nicht alles möglich! :D

und auch Sachen wie '' .de.ki '' oder '' .de.vu '' müsste man beachten...

BOA... is das alles überhaupt komplett unter einen Hut zu packen?

EDIT2:
ich sehe gerade... da kommen auch Sachen wie RSS Feeds - welche auch eigene präfixe haben - dazu... wenn ich mich net komplett irre
BlackJack

Montag 18. Dezember 2006, 21:42

EnTeQuAk hat geschrieben:vllt. können wir ja ma nen kleinen "Wettbewerb" machen --> wer den kürzesten und besten Regex bastelt, was URLs betrifft. Wäre bestimmt lustig spätestens, wenn man das alles ins Wiki packt.
Um $GOTTES willen, bitte nicht unser schönes Wiki mit so etwas verschandeln. Das ist eine Spielwiese für Perl-Anhänger.

Warum machst Du das überhaupt so furchtbar kompliziert? Du hast bei Deinem Problem doch scheinbar ein ']' als ziemlich eindeutiges Endkennzeichen.
BOA... is das alles überhaupt komplett unter einen Hut zu packen?
Den Link zu so einer Regex hast Du ja schon bekommen. Wenn Du selber etwas basteln willst, dann nimm Dir am besten das entsprechende RFC vor, da wird das recht formal und genau definiert.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Montag 18. Dezember 2006, 21:50

BlackJack hat geschrieben:
EnTeQuAk hat geschrieben:vllt. können wir ja ma nen kleinen "Wettbewerb" machen --> wer den kürzesten und besten Regex bastelt, was URLs betrifft. Wäre bestimmt lustig spätestens, wenn man das alles ins Wiki packt.
Um $GOTTES willen, bitte nicht unser schönes Wiki mit so etwas verschandeln. Das ist eine Spielwiese für Perl-Anhänger.
Und wo wir gerade dabei sind, wie wäre es mit einer Assoziationskette im Wiki?

<d&r>
Zuletzt geändert von birkenfeld am Montag 18. Dezember 2006, 22:02, insgesamt 1-mal geändert.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
BlackJack

Montag 18. Dezember 2006, 21:56

Aaaaaaaah! Hiiiiiiiiiiiiilfeeeee! :shock:

Aber warum nicht, soll ich die aus dem Forum mal in's Wiki kopieren? :twisted:
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 18. Dezember 2006, 22:22

EnTeQuAk hat geschrieben:
Nicht zu vergessen die Möglichkeit Leerzeichen in URLs zu machen.
Das wäre mir neu ;) Aber gut... ich lass mich gerne belehren.
Als Beispiel bringe in mal BlackJacks bekanntes Objects 'n' Names.pdf, welches er mal in d.c.l.p gepostet hat. Das war lustig :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Dienstag 19. Dezember 2006, 04:18

AAhhh ja :)

@ BlackJack :) Oder hier im Forum ... mir egal...

Das ich mit dem, was ich benätige mit dem '' # '' und dann noch dem Bezeichner '' link '' und den Eckigen klammern genug unterscheidungen habe weiß ich :)

Allerdings... fänd ich es lustig :)


MfG EnTeQuAk
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Dienstag 19. Dezember 2006, 08:49

Hi EnTeQuAk,

bist Du nachtaktiv oder Frühaufsteher? :wink:

Mir fällt auf, dass sich das Thema vom re-Test langsam hin zum effektiven URL-Parsen verlagert. Wenn Du tatsächlich effektiv URLs auswerten willst, brauchst Du das Python-Rad nicht neu zu erfinden, es gibt dafür schon ein eigenes eingebautes Modul: urlparse
Über eine einfache Funktion kannst Du URLs bequem analysieren. Als Beispiel die Adresse dieses Threads:

Code: Alles auswählen

>>> from urlparse import urlparse
>>> def parse_url(sURL):
...     tKomponenten = ("Protokoll", "Adresse", "Pfad", "Parameter", "Query","Fragment")
...     tURL = urlparse(sURL)
...     return dict(zip(tKomponenten, tURL))
... 
>>> sURL = "http://www.python-forum.de/topic-8362.html?highlight=24h" 
>>> for tKV in parse_url(sURL).items():
...     print "Komponente: %s\n  Wert: %s\n" % tKV
... 
Komponente: Query
  Wert: highlight=24h

Komponente: Pfad
  Wert: /topic-8362.html

Komponente: Adresse
  Wert: www.python-forum.de

Komponente: Fragment
  Wert: 

Komponente: Protokoll
  Wert: http

Komponente: Parameter
  Wert: 
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Dienstag 19. Dezember 2006, 09:00

Hmm... ich würde sagen...Schlaf gestört... Aber nun ja das ist ein anderes Thema :)

Hab ja Urlaub, da kann man sich so etwas mal erlauben.

Und das Rad neu erfinden wollte ich - mal wieder - eigentlcih nicht :)

Aber urlparse schaut doch ganz gut aus ;)

Das, was ich eigentlich wirklich wollte ist schon längst erledigt... es macht aber so spaß, mit euch in dem Forum zu diskutieren usw. da schweife ich halt gerne aus :D


MfG EnTeQuAk
Antworten