2012-12-11 3 views
0

J'essaie d'utiliser des expressions régulières pour rechercher dans tous les fichiers d'un répertoire, puis il va éventuellement changer le nom des fichiers.Python: Expressions régulières

Voici ce que j'ai jusqu'ici.

def regExp(): 
    os.chdir("C:/Users/David/Desktop/Test/Files") 
    files = os.listdir(".") 
    for x in (files): 
     inputFile = open((x), "r") 
     content = inputFile.read() 
     inputFile.close() 
     try: 
      regex_txt = ("\(;;\)") 
      regex = re.compile(regex_txt) 
      print (regex.findall(x)) 

Faire passer le message d'erreur suivant

File "<module1>", line 108 
    print (regex.findall(x)) 
         ^

SyntaxError: EOF inattendu lors de l'analyse syntaxique

Toute aide est appréciée

+1

Pourriez-vous montrer le code dans son intégralité, en vous assurant l'empreinte apparaît exactement comme dans votre fichier source. – NPE

+5

Est-ce Python 3.x par hasard? (Les parenthèses autour de 'print' sont requises dans 3.x car il s'agit maintenant d'une fonction et non d'une construction de syntaxe spéciale .. Essayez une recherche de' [python] [print] SyntaxError' sur SO Si l'une de ces questions/réponses résout ce problème problème, s'il vous plaît supprimer ce post.) –

+0

Votre code est incomplet –

Répondre

-3

Vous devez utiliser:

re.findAll(regex,text,flags) 

Si vous souhaitez effectuer une pré compiler, je pense que vous pouvez le faire comme ceci:

my_regex= re.compile(pattern) 
result = my_regex.match(string) 
+0

'match' n'est pas la même chose que' findall'. La façon de faire l'équivalent de 're.findall' avec une expression rationnelle précompilée est' my_regex.findall'. Exactement comme l'OP l'a écrit. – abarnert

3

Le problème est que vous ne disposez pas d'un except ou un bloc finally avec votre bloc try. Un bloc try lui-même n'a pas de sens, et si Python insiste sur le fait que vous avez soit

try: 
    your code 
except SomeException: 
    handle it 

ou

try: 
    your code 
finally: 
    clean up 
+0

si je mets un sauf dans ne pas imprimer l'instruction après pour chaque fichier l'expression régulière n'apparaît pas? –

+0

@ LWH91 Je ne suis pas sûr de ce que vous demandez. Je ne vois aucune exception, le code que vous avez dans le bloc 'try' est susceptible d'augmenter, donc je vous recommande simplement de supprimer le mot-clé' try'. –

+0

@ LWH91: Vous pouvez jouer avec la fonction 'findall' de l'interpréteur interactif pour voir quand il déclenche une exception. Si vous l'appelez sur une chaîne sans aucune correspondance, cela n'augmentera rien, cela retournera simplement une liste vide. La seule façon de déclencher une exception est si vous faites quelque chose comme l'appeler sur un nombre au lieu d'une chaîne (ce qui soulève un 'TypeError'). Si vous voulez gérer cela, vous avez besoin d'un 'try' _and_ an' except'. Si vous voulez laisser cela comme une erreur pour l'utilisateur, vous ne voulez ni "try" ni "except". – abarnert