2009-05-28 6 views
2

Ich möchte den Inhalt in jedem Absatz in HTML mit einem regulären Python-Ausdruck übereinstimmen. Diese Absätze haben immer BR-Tags in ihnen wie so:Passende Text in P-Tags in HTML

<p class="thisClass">this is nice <br /><br /> isn't it?</p> 

ich zur Zeit mit diesem Muster:

pattern = re.compile('<p class=\"thisClass\">(.*?)<\/p>') 

Dann benutze ich:

pattern.findall(html) 

zu finden, die Streichhölzer. Allerdings passt es nur zu zwei von 28 Absätzen, die ich habe, und es sieht so aus, weil diese beiden BR-Tags nicht in ihnen haben und der Rest tut. Was mache ich falsch? Was kann ich tun, um es zu beheben? Vielen Dank!

Antwort

5

Ich glaube nicht, dass es wegen der <br/> scheitert, sondern weil der Absatz über mehrere Zeilen verteilt ist. Verwenden Sie den DOTALL Modus dieses Problem zu beheben:

pattern = re.compile('<p class=\"thisClass\">(.*?)<\/p>', re.DOTALL) 
+0

Oder lieber sollten Sie den Re.DOTALL-Modus verwenden, damit der Punkt auch mit Zeilenumbrüchen übereinstimmt. http://www.regular-expressions.info/python.html –

+0

@Rene, danke, Sie haben Recht meine Antwort behoben –

+0

Vielen Dank für Ihre Antwort! Ich weiß, es ist ein Anfängerfehler;) – sotangochips

3

Es stellt sich heraus, war die Antwort re.S als Flag einschließen, die das ermöglicht „“ Zeichen, um auch Zeilenumbrüche zu erhalten.

pattern = re.compile('<p class=\"thisClass\">(.*?)<\/p>', re.S) 

Das funktioniert perfekt.

+1

Das ist eine Abkürzung zum DOTALL-Modus –