2011-03-28 4 views
1

Expression régulière pour enlever toutes les lignes entre #if X et #endif //#if X Notez le commentaire de style C est important et doit être pris en comptecomment créer une expression régulière en python

#if X 
.... 
..... 
#endif //#if X 

Ce qui suit ne donne pas souhaité o/p: Alors c'est le droit?

re.compile("#if.*?#endif //#if X", re.MULTILINE + re.DOTALL) 
+0

Quelle est la question? – unholysampler

+0

Quel est le problème ("pas le o/p désiré" est plutôt vague)? –

Répondre

1

Au lieu de 're.MULTILINE + re.DOTALL' essayez 're.MULTILINE | re.DOTALL ', c'est un peu le champ

+0

Bien que cela ne devrait pas importer ici parce que tous les drapeaux sont des puissances de 2, donc en ajoutant et "oring" les donnera le même résultat. Tu as quand même raison. –

+0

oh. Ouaip./Facepalm – reflog

2

Jusqu'à présent, vous venez de compiler votre regex, vous n'avez encore rien fait avec.

Vous devez faire ceci:

myregex = re.compile(r"#if.*?#endif //#if X", re.DOTALL) 
result = myregex.sub("", subject) 

subject est la chaîne que vous voulez travailler (et "" est la chaîne de remplacement).

Vous n'avez pas besoin du paramètre re.MULTILINE car vous n'utilisez pas du tout les ancres de début/fin de ligne.

1
re.compile(r'#if\s+([A-Z]+)$.+?#endif\s+//\s*#if\s+\1', re.M | re.S)