2009-12-24 15 views
1

Exemple de texte: String -> contenu dans la balise rev (via lxml). J'essaie de supprimer les {{BLOCKS}} dans le texte.Comment faire pour supprimer les blocs entourés par des accolades via python

Je l'ai utilisé l'expression rationnelle suivante pour supprimer simples, un des blocs de ligne:

p = re.compile('\{\{*.*\}\}') 
nonBracketedString = p.sub('', bracketedString) 

Toutefois, cela ne supprime pas la première ligne à plusieurs section entre crochets au début du contenu. Comment peut-on enlever les blocs à plusieurs lignes et à accolades?


EDIT:

Solution de réponse:

p = re.compile('\{\{*?.*?\}\}', re.DOTALL) 
nonBracketedString = p.sub('', bracketedString) 
+0

Hmm -> Je viens de découvrir que le point ne correspond pas à de nouvelles lignes: http://www.regular-expressions.info/dot.html – torger

Répondre

2

Définissez l'indicateur point d'accès.

p = re.compile('\{\{*.*?\}\}', re.DOTALL) 
nonBracketedString = p.sub('', bracketedString) 

En mode par défaut, . correspond à tout caractère sauf un saut de ligne. Si le drapeau DOTALL a été spécifié, ceci correspond à n'importe quel caractère incluant une nouvelle ligne.

http://docs.python.org/library/re.html

En outre, vous aurez besoin d'un match non gourmand entre les supports: .*?

+1

Même résultat que sysrqb. [[]] block est tout ce qui reste. – torger

1

Réglez le dotall flag-- cela permet. pour faire correspondre les nouvelles lignes.

p = re.compile('\{\{*.*\}\}', re.DOTALL) 
nonBracketedString = p.sub('', bracketedString) 
+0

Lorsqu'il est appliqué à la chaîne fournie -> Il semble supprimer tout sauf pour le dernier [[]] bloc, pour moi. – torger

1
>>> import urllib2 
>>> import re 
>>> s = "".join(urllib2.urlopen('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Italian%20War%20of%201542-1546&redirects&rvprop=content&format=xml').readlines()) 
>>> p = re.compile('\{\{.*?\}\}', re.DOTALL) 
>>> re.sub(p, '', s) 
'<?xml version="1.0"?><api><query><redirects><r from="Italian War of 1542-1546" to="Italian War of 1542\xe2\x80\x931546" /></redirects><pages><page pageid="3719774" ns="0" title="Italian War of 1542\xe2\x80\x931546"><revisions><rev xml:space="preserve">\n\n\n\nThe \'\'\'Italian War of 1542\xe2\x80\x9346\'\'\' was a conflict late in the [[Italian Wars]], ... 

J'ai tronqué la sortie, mais il suffit de voir que cela fonctionne.