2010-06-15 4 views
1

dans le script Python, pour chaque définition de méthode dans un code C++ de la forme:expression régulière - corps de la fonction extraction

return_value ClassName::MethodName(args) 
{MehodBody} 

je dois extraire trois parties: le nom de la classe, le nom de la méthode et le corps de la méthode pour un traitement ultérieur. Trouver et extraire les ClassName et MethodName est facile, mais existe-t-il un moyen simple d'extraire le corps de la méthode? Avec possible '{' et '}' à l'intérieur? Ou sont regexes impropres à une telle tâche?

+0

Je vais vérifier si je peux simplement diviser sur l'en-tête de la méthode: « return_value ClassName :: MethodName (args) { » tout en obtenant la ClassName et les cordes MethodName et en quelque sorte les reliant au résultat de partage suivant ("corps de méthode") parce qu'ils sont essentiels à ce que je veux faire avec le corps de fonction. (sinon j'utiliserais simplement re.split). Désolé si je fais et parler un peu BS d'un point de vue du gourou Python;), mais je suis tout à fait nouveau dans cette langue et veulent tout simplement ma tâche fait :). – altariste

+0

poster votre code, et une vraie chaîne d'entrée. – SilentGhost

+0

Ok, je lis la fonction split doc plus à fond et il semble qu'il fait ce que je veux (RTFM d'abord, imbécile!;)). Néanmoins, merci pour votre aide à tous. Je pense que le cas est fermé (je ferais la chose Cane Horatio, mais je n'ai pas des lunettes de soleil;)) – altariste

Répondre

3
>>> s = """return_value ClassName::MethodName(args) 
{MehodBody {} } """ 
>>> re.findall(r'\b(\w+)::(\w+)\([^{]+\{(.+)}', s, re.S) 
[('ClassName', 'MethodName', 'MehodBody {} ')] 
1

Je recommande que vous utilisez le parser module plutôt que regexps puisqu'il traitera des choses comme de multiples fonctions de ligne, différentes indentations et interrompra sur l'entrée malformé afin que vous puissiez mieux gérer les choses. "Évitez les expressions rationnelles si vous le pouvez" est l'une des règles que je vis, car ils sont souvent plus de problèmes qu'ils en valent la peine.


Edit: Oh bien. J'ai mal interprété votre question. Je pensais que vous vouliez analyser le code Python lui-même. Je googlé un peu et trouvé this mais il est C seulement. Peut-être pourriez-vous prolonger cela? La grammaire C++ est là dans le « langage C++ livre de programmation »

+0

est analyseur pas destiné à code python? – SilentGhost

+0

Ouais. J'ai mal lu la question et l'ai mise à jour. –