2010-09-17 8 views
8

je l'expression régulière suivante:Python CORRESPONDANCE REGEX Newline

[0-9]{8}.*\n.*\n.*\n.*\n.* 

Ce que j'ai testé dans Expresso contre le fichier, je travaille et le match est sucessfull.

Je veux correspondre les éléments suivants:

  • Numéro de référence 8 chiffres
  • Tout caractère, un certain nombre de fois
  • New Line
  • Tout caractère, un certain nombre de fois
  • New Line
  • N'importe quel caractère, n'importe quel nombre de fois
  • N ew Ligne
  • Tout caractère, un certain nombre de fois
  • New Line
  • Tout caractère, un certain nombre de fois

Mon code python est:

for m in re.findall('[0-9]{8}.*\n.*\n.*\n.*\n.*', l, re.DOTALL): 
     print m 

Mais aucune correspondance sont produits , comme dit dans Expresso, il y a plus de 400 matches, ce qui est ce à quoi je m'attendais.

Qu'est-ce qui me manque ici?

Répondre

12

N'utilisez pas re.DOTALL ou le point correspondra également aux retours à la ligne. En outre utiliser des chaînes brutes (r"...") pour regexes:

for m in re.findall(r'[0-9]{8}.*\n.*\n.*\n.*\n.*', l): 
    print m 

Cependant, votre version devrait encore avoir travaillé (bien que très inefficacement) si vous avez lu le fichier entier comme binaire en mémoire comme une grande chaîne.

La question est, êtes-vous en train de lire le fichier comme ceci:

with open("filename","rb") as myfile: 
    mydata = myfile.read() 
    for m in re.findall(r'[0-9]{8}.*\n.*\n.*\n.*\n.*', mydata): 
     print m 

Ou Vous travaillez avec des lignes simples (for line in myfile: ou myfile.readlines())? Dans ce cas, l'expression régulière ne peut pas fonctionner, bien sûr.

+0

Salut, oui Je cours python sur windows mais le fichier provient d'un environnement unix. – humira

+1

L'origine du fichier est peu susceptible d'importer. La question était de savoir si vous étiez en train d'ouvrir le fichier en entier ou d'utiliser un itérateur. Les itérateurs Python parcourent les nouveaux caractères de ligne. –