Problem mit 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
günni
User
Beiträge: 9
Registriert: Dienstag 27. Mai 2003, 14:28

hi
wie schon gesagt hab ich ein problem mit einem regex...
ich würde gern urls von einer news-webseite auslesen.
die urls haben immer den gleichen aufbau und unterscheiden sich nur nach dem letzten slash...

deshalb hab ich versucht einfach den letzten teil der url mit einem regex suchen zu lassen.

Code: Alles auswählen

url = re.compile('[a-z]+?-\d\d\.\d\d\.\d\d-\d\d\d')
(der letzte teil der url hat immer die form:
2-3 buchstaben, ein minuszeichen, gefolgt von dem aktuellen datum z.b. 02.03.03, dann wieder ein minus, gefolgt von 3 zahlen.)

das funktioniert soweit auch ganz gut....
allerdings bekomme ich als ausgabe immer die komplette zeile in der der ausdruck enthalten ist
und nicht NUR den ausdruck nach dem ich suche...

wie schaffe ich es das nur der ausdruck nach dem ich suche zurück gegeben wird?

gruß
günni
Qbi
User
Beiträge: 57
Registriert: Mittwoch 25. Juni 2003, 14:04
Kontaktdaten:

günni hat geschrieben:wie schon gesagt hab ich ein problem mit einem regex...
ich würde gern urls von einer news-webseite auslesen. [/code]

eine == heise :wink:
günni hat geschrieben:

Code: Alles auswählen

url = re.compile('[a-z]+?-\d\d\.\d\d\.\d\d-\d\d\d')
(der letzte teil der url hat immer die form:
2-3 buchstaben, ein minuszeichen, gefolgt von dem aktuellen datum z.b. 02.03.03, dann wieder ein minus, gefolgt von 3 zahlen.)
Ich würde es eher so machen:

Code: Alles auswählen

 url = re.compile('\w{2,3}-(\d\d\.?){3}-\d{3}')
bzw. den Datumsteil genauer durch eine RE bestimmen.
günni hat geschrieben:allerdings bekomme ich als ausgabe immer die komplette zeile in der der ausdruck enthalten ist
und nicht NUR den ausdruck nach dem ich suche...
Eventuell musst du die RE mit '\b' umschliessen oder dein Vorhaben (wie sieht die Quelle aus?) nochmal genauer beschreiben.
Gast

heise ... wie kommst du dadrauf ? ;)

mir hat inzwischen Achim Domma auf der de-python-mailinglist geholfen..
In dem konkreten Beispiel würde ich das einfach so lösen:

import urllib, re

# liste von tuple mit (titel,link) erzeugen
hrdf = urllib.urlopen('http://www.heise.de/newsticker/heise.rdf').read()
pattern =
r'<title>(.+?)</title>\s*<link>(http://www.heise.de/newsticker/data/.+?)</li
nk>'
links = re.findall(pattern,hrdf)

# in liste mit links verwandeln
links = '\n'.join(["<a href='%s'>%s</a><br>" % (link,title) for title,link
in links])
print "<html><body>%s</body></html>" % links

Für meinen Geschmack ist das ein guter Kompromiss zwischen Kompaktheit und
Lesbarkeit. Aber Geschmäcker sind ja bekannter Maßen unterschiedlich! ;-)

Gruß,
Achim
das skript wirft eine html-seite aus, in der die aktuellen news des heisetickers aufgelistet sind.
(nicht alle news! nur die aus dem rdf-file)

andererseits muß ich mir echt mal die module zu xml, htmllib und/oder rdflib ankucken...

gruß rocket
Qbi
User
Beiträge: 57
Registriert: Mittwoch 25. Juni 2003, 14:04
Kontaktdaten:

Anonymous hat geschrieben:heise ... wie kommst du dadrauf ? ;)
mir hat inzwischen Achim Domma auf der de-python-mailinglist geholfen..
Ich dachte, du hast Probleme mit der RE. Aber offensichtlich, war es noch das gesamte Stück Code. Schreib das beim nächsten al bitte dazu. Dann kann man dir gezielter helfen.

Viel Spaß beim Tickern :P
Jens Kubieziel http://www.kubieziel.de
http://www.kubieziel.de/pythonwiki/
Antworten