einfacher regulärer Ausdruck

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
sprudel
User
Beiträge: 248
Registriert: Donnerstag 8. März 2007, 17:12

Donnerstag 1. November 2007, 19:19

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
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Donnerstag 1. November 2007, 19:25

moin,

Code: Alles auswählen

>>> import re
>>> re.findall("<br>(.+)</br>", "ABCDEF<br>%S</br>EHOKERH ")
['%S']
cp != mv
sprudel
User
Beiträge: 248
Registriert: Donnerstag 8. März 2007, 17:12

Donnerstag 1. November 2007, 19:30

Hallo.

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

Donnerstag 1. November 2007, 19:33

Hinter das '+' bitte noch ein Fragezeichen setzen, sonst gibt's eine Überraschung wenn zwei von diesen Tags in einer Zeile vorkommen.
sprudel
User
Beiträge: 248
Registriert: Donnerstag 8. März 2007, 17:12

Donnerstag 1. November 2007, 19:36

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)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Donnerstag 1. November 2007, 20:15

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
sprudel
User
Beiträge: 248
Registriert: Donnerstag 8. März 2007, 17:12

Donnerstag 1. November 2007, 20:51

Hat denn jemand für mein Problem eine Lösung? Irgendwie hab ich das immernoch nicht so recht hingekriegt :-)
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Donnerstag 1. November 2007, 20:51

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.
sprudel
User
Beiträge: 248
Registriert: Donnerstag 8. März 2007, 17:12

Donnerstag 1. November 2007, 21:17

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.
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Donnerstag 1. November 2007, 21:53

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 2. November 2007, 09:47

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sprudel
User
Beiträge: 248
Registriert: Donnerstag 8. März 2007, 17:12

Freitag 2. November 2007, 11:10

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 )
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 2. November 2007, 12:22

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten