string filtern

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
Rasti
User
Beiträge: 6
Registriert: Dienstag 16. Mai 2006, 17:41
Wohnort: Wiener Neustadt

Hello
Hänge da bei einem Problem
Ich möchte aus einem text einen bestimmten string rausfiltern von dem ich nur die Umgebung kenne. Konkret will ich aus einem Html file dynamische Inhalte filtern von denen ich das Umfeld kenne, welches sich nicht verändert.

Bsp.

<a href="http://www.jobkralle.at" target="_blank" class="jobUrl">www.jobkralle.at</a></td>

z.B. will ich nur das zweite "jobkralle.at" rausfiltern.
Gibts es soeine Funktion?

Ich kenne dies von dem set befehl.
Jah Rastafari
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

import re
re.findall(r'>www.(.*?)<', '<a href="http://www.jobkralle.at" target="_blank" class="jobUrl">www.jobkralle.at</a></td>')
*grml*, das war irgendwo im Wiki, ich finds jetzt auch grad nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Rasti
User
Beiträge: 6
Registriert: Dienstag 16. Mai 2006, 17:41
Wohnort: Wiener Neustadt

Super. Einfach genial.
Genau das was ich gesucht habe.
Danke
Jah Rastafari
Rasti
User
Beiträge: 6
Registriert: Dienstag 16. Mai 2006, 17:41
Wohnort: Wiener Neustadt

Hab jetzt noch ne frage. Suche jetzt schon seit stunden eine Lösung.

Ich will in einem .html file einen text rausfiltern so wie oben. Aber leider brauche ich zum vergleichem mehrere Zeilen. Nur jack ich nicht wie ich die Zeilenumbrüche usw. richtig hinbekomme.
Das sollte er filtern:

<td class="tech_links">Aufbau</td>
<td width="10"></td>
<td class="grau_bg">(.*?)</td>

also so irgenwie hab ichs versucht.

Code: Alles auswählen

re1= re.compile('<td class="tech_links">Aufbau</td><td width="10"></td><td class="grau_bg">(.*?)</td>')
aufbau = re1.findall(content)
hab hunderte varianten schon ausprobiert...tonnen von text gelesen...ich hab einfach keine Ahnung. Ich bitte um hilfe.

Noch eine kleine zusätzlich Frage: was bedeutet das r bei z.B re.findall(r'blabla

Danke schon mal
Jah Rastafari
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Versuch mal beim Compile die Option re.MULTILINE anzugeben. Zeilenbrüche sind \n, die musst du dann in der Expression auch angeben (wobei ich zugeben, das macht manchmal Schwierigkeiten).

Das r vor den Strings bezeichnet Raw-Strings. Weitere Infos findest du mit der Forensuche, das wurde schon mehrmals erklärt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@Rasti: Schau dir mal BeautifulSoup an ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Rasti
User
Beiträge: 6
Registriert: Dienstag 16. Mai 2006, 17:41
Wohnort: Wiener Neustadt

Jawoll es geht
Hab das jetzt so gelöst. Ich weis ist sicher net die feine art aber wie gesagt es geht.
Problem waren irgendwelche Leerräume unsw.
Undurchblickbar diese Regular Expressions. echt org.

Code: Alles auswählen

# Im content steht ein html string

split = content.split('  ')                     
content= ''
regex = re.compile(r'\s*(\n|$)')
for i in split:             
     i = regex.sub("",i)
     content = content + i

aufbau = re.findall('<td class="tech_links">Aufbau</td><td width="10"></td><td class="grau_bg">(.*?)</td>',content)
Danke nochmals
Jah Rastafari
Antworten