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

string filtern

Beitragvon Rasti » Dienstag 16. Mai 2006, 17:57

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

Beitragvon Leonidas » Dienstag 16. Mai 2006, 18:26

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

Beitragvon Rasti » Dienstag 16. Mai 2006, 21:26

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

Beitragvon Rasti » Montag 29. Mai 2006, 22:24

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

Beitragvon Leonidas » Dienstag 30. Mai 2006, 13:19

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 30. Mai 2006, 14:04

@Rasti: Schau dir mal BeautifulSoup an ;)

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

Beitragvon Rasti » Dienstag 30. Mai 2006, 23:12

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder