[Python-de] Schon wieder findall

Tobias Klausmann klausman at schwarzvogel.de
Son Mar 13 19:19:44 CET 2005


Hi! 

On Sun, 13 Mar 2005, Albert Hermeling wrote:
> Aus folgenden zwei Strings sollen alle Wörter die von den Tags <b> </b>, <u> 
> </u> und <i> </i>. eingeschlossen sind gefunden werden. Zu berücksichtigen 
> ist das im dem Beginn Tags  CSS Stylesheets stehen können:
> 
> str1 = 'Und was ist <b><i>fett und schief</i></b> der <b>Dicke</b> mit den 
> <i>schiefen</i> Gang'
> 
> str2 = 'Ein <b>Haus</b> ist <i>groß</i> wenn es <u>zwei Stockwerke</u> hat'
> 
> Folgende RegExe führte zum Teilerfolg:
> 
> reg = re.compile(r"<[biu].*>(.+)</[biu]>")
> reg.findall(str1 [bzw. str2])

Problem: du schliesst dort nicht aus, dass <b>a</b><i>c</i>
matcht (als ganzes). Besser:

reg = re.compile(r"<[biu][^>]*>[^<]*</[biu]>")

[^>] bedeutet "alles ausser <"; entsprechend [^<]

Und voila:

reg.findall(str1)
['<i>fett und schief</i>', '<b>Dicke</b>', '<i>schiefen</i>']
reg.findall(str2)
['<b>Haus</b>', '<i>gro\xdf</i>', '<u>zwei Stockwerke</u>']

> Schon mal Danke im voraus.

De nada :)

Gruss,
Tobias

-- 
export DISPLAY=vt100