2016-05-24 1 views
0

J'ai un fichier journal, au moins mille lignespython - ligne d'impression et la liste qui contient match regex

abc.txt: 
1. example eg, ham, cheese 350.122.345.8 
2. cheese ham eg, example 231.242.1.2 
3. Ham cheese, example,e.g 100.200.100.200 
4. 
5. Ham cheese, example,e.g 100.200.100.200 
1000. 

Résultat final Je veux:

Imprimer uniquement les lignes qui correspondent au nombre au sein de l'IP plage d'adresses. Il devrait donc imprimer seulement:

2. cheese ham eg, example 231.242.1.2 
3. Ham cheese, example,e.g 100.200.100.200 
5. Ham cheese, example,e.g 100.200.100.200 

J'ai essayé le code suivant, mais incapable d'obtenir le résultat que je veux:

import re 

txt=open('/sdcard/Download/abc.txt','r') 

pattern=re.compile('(^[2][0-5][0-5]|^[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})$', re.DOTALL) 

for line in txt: 
    if str(pattern) in line: 
     print line 
    else: 
     print 'WRONG LINE:',line 

Le résultat qui retourne la liste de ligne complète imprimée et en montrant mon autre Message WRONG LINE.

J'ai vérifié mon regex avec vérificateur en ligne, et il est montrant le bon comportement, correspondant à toutes les adresses IPv4, qui ne dépassent 0,255

S'il vous plaît-moi de l'erreur.

+1

str (motif) en est pas ce que coût média que vous voulez. Vous avez besoin de quelque chose comme 're.search' ou' re.match'. – ForceBru

+0

'si re.search (motif, ligne) print bla' – rock321987

+1

Si vous utilisez un motif compilé, vous devez utiliser ses méthodes de recherche ou de correspondance. https://docs.python.org/2/library/re.html#re.compile – Jasper

Répondre

0

Voici le regex corrigé et code:

import re 

txt= {"1. example eg, ham, cheese 350.122.345.8", 
     "2. cheese ham eg, example 231.242.1.2", 
     "3. Ham cheese, example,e.g 100.200.100.200", 
     "4.", 
     "5. Ham cheese, example,e.g 100.200.100.200"} 


pattern=re.compile('([2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})', re.DOTALL) 

for line in txt: 
    if pattern.search(line): 
     print line 
    else: 
     print 'WRONG LINE:',line 
+0

Oui. C'est le code. Merci beaucoup! – user1935007

0

De: @RudyTheHunter

import re 

txt=open('/sdcard/Download/abc.txt','r') 

pattern=re.compile('([2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})\.([0-2][0-5][0-5]|[1]{0,1}[0-9]{1,2})', re.DOTALL) 

for line in txt: 
    if pattern.search(line): 
     print line 
    else: 
     print 'WRONG LINE:',line