URLs mittels regex aus strings filtern [gelöst]
Verfasst: Montag 3. Dezember 2007, 14:11
hallo,
wie die überschrift schon beschreibt, möchte ich aus strings, wie z.b.:
'Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail'
oder
'uswsusp ( http://aur.archlinux.org/packages.php?d ... 1&ID=14093 )'
oder
'blabla bla bla sourceforge.net bla blub'
die URLs filtern, und dann natürlich auch als strings zurückgeben.
d.h. aus dem ersten string:
'http://www.gmx.net/de/go/freemail',
aus dem zweiten 'http://aur.archlinux.org/packages.php?d ... 1&ID=14093'
und aus dem dritten 'sourceforge.net'.
ich habe nun folgendes gemacht:
zur erklärung:
1. "(http(s)?://|ftp://)?" -> entweder http:// oder https:// oder ftp:// oder gar nichts
2. "(www\.)?" -> entweder www. oder gar nichts
3. "[\w\.-]" -> teil der URL zwischen www. und .domain, also [a-zA-Z0-9_] oder . oder - (hmm, hier wird der domain-teil doppelt erfasst...)
4. "\.[a-z]{2,4}" -> domain mit 2-4 zeichen (zb .de oder .info oder .org)
5. "(/.*)?" -> / am ende oder /irgenwelche zeichen oder gar nichts
ok, wenn ich das nun eingebe, passiert folgendes:
oder
heh? was zum geier mache ich falsch!!!
ich hing schon die halbe nacht dran, habe mich blöd gegooglet, aber irgendwie kriege ich das nicht hin.
bitte helft mir!
vlad
wie die überschrift schon beschreibt, möchte ich aus strings, wie z.b.:
'Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail'
oder
'uswsusp ( http://aur.archlinux.org/packages.php?d ... 1&ID=14093 )'
oder
'blabla bla bla sourceforge.net bla blub'
die URLs filtern, und dann natürlich auch als strings zurückgeben.
d.h. aus dem ersten string:
'http://www.gmx.net/de/go/freemail',
aus dem zweiten 'http://aur.archlinux.org/packages.php?d ... 1&ID=14093'
und aus dem dritten 'sourceforge.net'.
ich habe nun folgendes gemacht:
Code: Alles auswählen
grab_url = re.compile('(http(s)?://|ftp://)?(www\.)?[\w\.-]\.[a-z]{2,4}(/.*)?', re.I)
1. "(http(s)?://|ftp://)?" -> entweder http:// oder https:// oder ftp:// oder gar nichts
2. "(www\.)?" -> entweder www. oder gar nichts
3. "[\w\.-]" -> teil der URL zwischen www. und .domain, also [a-zA-Z0-9_] oder . oder - (hmm, hier wird der domain-teil doppelt erfasst...)
4. "\.[a-z]{2,4}" -> domain mit 2-4 zeichen (zb .de oder .info oder .org)
5. "(/.*)?" -> / am ende oder /irgenwelche zeichen oder gar nichts
ok, wenn ich das nun eingebe, passiert folgendes:
Code: Alles auswählen
>>> grab_url.findall('Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail')
[('', '', '', '')]
Code: Alles auswählen
>>> print grab_url.match('Alle Infos und kostenlose Anmeldung: http://www.gmx.net/de/go/freemail')
None
Code: Alles auswählen
>>> grab_url.findall('uswsusp ( http://aur.archlinux.org/packages.php?do_Details=1&ID=14093 )')
[('', '', '', ''), ('', '', '', '/packages.php?do_Details=1&ID=14093 )')]
Code: Alles auswählen
>>> print grab_url.match('uswsusp ( http://aur.archlinux.org/packages.php?do_Details=1&ID=14093 )')
None
ich hing schon die halbe nacht dran, habe mich blöd gegooglet, aber irgendwie kriege ich das nicht hin.
bitte helft mir!
vlad