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