2010-06-14 8 views
2

J'ai besoin de trouver toutes les invocations de certaines macros de journalisation dans le code. L'invocation macro est de la forme:expression régulière

DEBUG[1-5] ("methodName: the logged message", arguments) 

Mais les nouvelles versions des macros sont préfixer le nom de la méthode automatiquement, donc ma tâche est d'écrire un script Python qui supprimera les noms de fonctions en double spécifiées déjà par le programmeur. J'utilise la sous-fonction depuis le module de repositionnage. Je prévois de remplacer la partie indiquée par || signes ci-dessous:

||DEBUG[1-5] ("methodName: || the logged message", arguments) avec simplement DEBUG[1-5]("

Le problème est le suivant:

Pour trouver les expressions que je veux remplacer, j'utilise l'expression régulière suivante:

((DEBUG | INFO | all other macros names)[1-5]*)\s*\(\"\w+: 

Mais il ne correspond pas à l'expression entière (de DEBUG à deux points), mais seulement le nom de la macro, c'est par exemple DEBUG5.

Est-ce que mon expression est incorrecte ou il y a un peu de bizarrerie dans le traitement de l'expression rationnelle Python? (peut-être le fait que j'utilise le DEBUG [1-5] comme un sous-groupe a quelque chose à voir avec ça?) Aide de quelqu'un de plus instruit que moi apprécié :).

Répondre

2

essayer, écrit en Java, mais vous pouvez la transformer en python

replaceAll("(DEBUG[1-5]\s*\\(\")\"[^:]+:\\s+([^;]+)", "$1$2");