2012-09-12 16 views
7

La mia espressione regolare non sta facendo nulla alla mia stringa.espressione regolare python corrispondente a qualsiasi cosa

pitone

data = 'random\n<article stuff\n</article>random stuff' 
datareg = re.sub(r'.*<article(.*)</article>.*', r'<article\1</article>', data, flags=re.MULTILINE) 
print datareg 

ottengo

random 
<article stuff 
</article>random stuff 

voglio

<article stuff 
</article> 
+2

Aw, c'mon: Non [Cthulhu Parsing] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) di nuovo . – pillmuncher

+0

@pillmuncher: mi sembra HTML malformato, quindi dubito che un parser HTML sia in grado di lavorarci molto facilmente. – Blender

+0

@Blender: Penso che tu abbia ragione. Ma la sostituzione sembra non essere un XML valido neanche. Mi chiedo, a cosa serve uno XML rotto? – pillmuncher

risposta

10

re.MULTILINE in realtà non rendere il vostro multilinea regex nel modo in cui si desidera che sia.

Se specificato, il carattere di modello '^' corrisponde all'inizio della stringa e all'inizio di ogni riga (immediatamente dopo ogni riga di nuova riga); e il carattere del pattern '$' corrisponde alla fine della stringa e alla fine di ogni riga (immediatamente prima di ogni riga nuova). Per impostazione predefinita, '^' corrisponde solo all'inizio della stringa e '$' solo alla fine della stringa e immediatamente prima della fine riga (se presente) alla fine della stringa.

re.DOTALL fa:

Fai il carattere speciale '.' corrisponde ad ogni carattere, incluso il fine riga; senza questo flag, '.' corrisponderà a qualsiasi valore tranne a newline.

Change flags=re.MULTILINE per flags=re.DOTALL e la vostra regex funzionerà.

+0

fantastico, segnerà come corretto :) grazie! – user1442957

+0

mi ha salvato la giornata! Grazie – silviomoreto

Problemi correlati