Seite 1 von 1

einfacher regulärer Ausdruck

Verfasst: Donnerstag 1. November 2007, 19:19
von sprudel
Hallo.

Ich suche eine Lösung für folgendes Problem und hab ehrlich gesagt keine Ahnung wie ich das anstellen soll. Da ich am besten durch Beispiele lerne, wollte ich hier mal Fragen ob ihr mir da eine gute Beispiellösung geben könnt:

Ich habe folgende Zeichenkette


ABCDEF<br>%S</br>EHOKERH


wie bekomme ich jetzt z.B. das %S (Es ist total egal was es für Zeichen sind, Hauptsache das dazwischen) raus?

Hoffe ihr könnt mir helfen.
Gruß sprudel

Verfasst: Donnerstag 1. November 2007, 19:25
von Costi
moin,

Code: Alles auswählen

>>> import re
>>> re.findall("<br>(.+)</br>", "ABCDEF<br>%S</br>EHOKERH ")
['%S']

Verfasst: Donnerstag 1. November 2007, 19:30
von sprudel
Hallo.

Das funktioniert schonmal recht gut, nur gibt es Probleme sobald Tabulatoren bzw. Leerzeichen drinnen sind. Gibts dafür auch noch was?

Verfasst: Donnerstag 1. November 2007, 19:33
von BlackJack
Hinter das '+' bitte noch ein Fragezeichen setzen, sonst gibt's eine Überraschung wenn zwei von diesen Tags in einer Zeile vorkommen.

Verfasst: Donnerstag 1. November 2007, 19:36
von sprudel
Falls es noch jemand interessiert:
Ich versuche den aktuellen Titel von http://antenne1.de/index_start.php rauszufiltern.
Und ja, ich weiß dass das nicht gerne gesehen wird. Ich mache es auch nur aus Übungszwecken :-)

Mein bisheriger Code ist dieser:

BEFORE = """<br>"""

AFTER = """</td>"""

URL = "http://antenne1.de/index_start.php"

text = urllib2.urlopen(URL).read()
expr = "%s(.+?)%s" % (BEFORE,AFTER)
result = re.findall(expr ,text)
print(result)

Verfasst: Donnerstag 1. November 2007, 20:15
von birkenfeld
sprudel hat geschrieben:Falls es noch jemand interessiert:
Ich versuche den aktuellen Titel von http://antenne1.de/index_start.php rauszufiltern.
Und ja, ich weiß dass das nicht gerne gesehen wird. Ich mache es auch nur aus Übungszwecken :-)

Mein bisheriger Code ist dieser:

BEFORE = """<br>"""

AFTER = """</td>"""

URL = "http://antenne1.de/index_start.php"

text = urllib2.urlopen(URL).read()
expr = "%s(.+?)%s" % (BEFORE,AFTER)
result = re.findall(expr ,text)
print(result)
Wenn du die RE aus Konstanten generierst, solltest du re.escape(BEFORE) bzw. re.escape(AFTER) verwenden, um böse Überraschungen zu vermeiden.

Verfasst: Donnerstag 1. November 2007, 20:51
von sprudel
Hat denn jemand für mein Problem eine Lösung? Irgendwie hab ich das immernoch nicht so recht hingekriegt :-)

Verfasst: Donnerstag 1. November 2007, 20:51
von rafael
sprudel hat geschrieben:Falls es noch jemand interessiert:
Ich versuche den aktuellen Titel von http://antenne1.de/index_start.php rauszufiltern.
Und ja, ich weiß dass das nicht gerne gesehen wird. Ich mache es auch nur aus Übungszwecken :-)

Mein bisheriger Code ist dieser:

BEFORE = """<br>"""

AFTER = """</td>"""

URL = "http://antenne1.de/index_start.php"

text = urllib2.urlopen(URL).read()
expr = "%s(.+?)%s" % (BEFORE,AFTER)
result = re.findall(expr ,text)
print(result)
Für HTML zu parsen, gibt es BeautifulSoup.

Verfasst: Donnerstag 1. November 2007, 21:17
von sprudel
Das ist ja noch mehr zu lernen ;)

Hat denn jemand damit eine Idee? Ich glaub ich hab mich mit dieser Aufgabe absolut übernommen, würde sie aber gerne noch gelöst haben.

Verfasst: Donnerstag 1. November 2007, 21:53
von rafael
What's On Air ist ein Programm (von Leonidas), was diesen Job erledigt.
Es gibt aber keinen Parser für deinen Sender. Schau dir einfach mal die schon existierenden an.

Verfasst: Freitag 2. November 2007, 09:47
von Leonidas
rafael hat geschrieben:Es gibt aber keinen Parser für deinen Sender. Schau dir einfach mal die schon existierenden an.
Jetzt schon.

Am besten macht man einen Checkout davon und kann nun einfach `python whatsonair.py --antenne1` verwenden, um den Titel zu bekommen.

Wobei man zugeben muss: da sind schon wieder so viele kaputt! Daher habe ich jetzt alternativ zu den Regulären Ausdrücken eine andere Methode zum Zerlegen des HTMLs implementiert. Ist aber noch nicht ganz optimal. Man müsste sich eben mal dransetzen und die ganzen Parser durchgehen, wo es nötig ist die korrigieren.

Verfasst: Freitag 2. November 2007, 11:10
von sprudel
Wow, das ist ja super. Wäre es jetzt egal meine eigentliche Idee zu verwirklichen? Ich habe ja eigentlich gedacht das wird nicht so gerne gesehen, aber ich würde eben gerne die aktuellen Titel mit Uhrzeit in einer Datenbank speichern um dann nachträglich nachvollziehen zu können was wann im Radio lief :-) (und nein, das schaff ich noch alleine :D )

Verfasst: Freitag 2. November 2007, 12:22
von Leonidas
sprudel hat geschrieben:Ich habe ja eigentlich gedacht das wird nicht so gerne gesehen, aber ich würde eben gerne die aktuellen Titel mit Uhrzeit in einer Datenbank speichern um dann nachträglich nachvollziehen zu können was wann im Radio lief :-)
Naja, Iopodx hat mal in PHP eine Anwendung geschrieben, die whatsonair gepollt hat und die Informationen in eine Datenbank geschrieben. Du kannst `whatsonair.py` als Bibliothek verwenden, brauchst etwas Glue-Code der die Werte in eine Datenbank speichert und bist fertig.