2016-06-21 17 views
0

Ich habe eine Textdatei im Grunde, und ich möchte nach dem mittleren Wort eines Satzes suchen. Ich erhalte die Fehlermeldung found_state not defined, wenn ich mein .py Skript ausführe.Python Regex, um ein bestimmtes Wort in der Mitte einer Textdatei zu finden

diese Datei vor:

file.conf 
hostname(config)#aaa new-model 
fdfsfd b 
kthik 
pooooo 
shh 

Mein Python-Skript wie folgt aussieht:

import re;  
import time; 

with open('file.conf') as f: 
    content = f.readlines() 
name='' 

for data in content: 
    if re.search('(?<=#)\w+',data): 
     found_state=1 
     name=data 
     break 
if found_state==1: 
    print name + "is Found" 
else: 
    print "NF" 
+0

Also deklarieren Sie 'found_state' vorher. Wo benutzt du das Skript? Neben der Deklaration der Variablen müssen Sie möglicherweise auch 'global found_state' im 'if'-Block angeben und sie dann' 1' zuweisen. –

+0

Ok, vielleicht brauchst du nur 'r' # (\ w +) ''und dann' .group (1) '? Siehe https://ideone.com/HdPCEt –

+0

Verbesserte Formatierung ein wenig – AlBlue

Antwort

0

Da Sie sagen, dass Sie das "mittlere Wort" bekommen müssen, verstehe ich Sie brauchen extrahieren dieses Wort. Gerade jetzt bekommst du die ganze Zeile, wenn es eine Übereinstimmung gibt.

Hier ist a piece of code, die für Sie arbeiten sollte (es druckt aaa is Found):

import re; 
content = ["hostname(config)#aaa new-model", "fdfsfd b", "kthik", "pooooo", "shh"] # <= TEST DATA 
name='' 
found_state = 0      # Declare found_state 
for data in content: 
    m = re.search(r'#(\w+)',data)  # Use a raw string literal and a capturing group 
    if m:        # Check if there was a match and if yes 
     found_state=1     # - increment found_state 
     name=m.group(1)    # - get the word after # 
     break 
if found_state==1: 
    print name + " is Found" 
else: 
    print "NF" 

Aber vielleicht würden Sie wollen Ihren Code

res = [] 
for data in content: 
    res.extend(re.findall(r'#(\w+)', data)) 
print(res) 

Siehe this demo zu reduzieren. Das Muster #(\w+) erfasst Wortzeichen (1 oder mehr) nach einer # und gibt nur diese erfassten Teilzeichenfolgen zurück, und extend fügt alle Zeichen zur Liste hinzu.

+1

danke es funktioniert !!! – GoluBoss

0

Wenn Ihr Zustand if re.search('(?<=#)\w+',data): ausfällt, dann wird found_state nicht deklariert. Tun Sie das vor der for-Schleife.

+0

Was sollte der Regex sein, um #aaa innerhalb der Textdatei zu finden? – GoluBoss

+0

Sie können Ihre Regex hier aufbauen und ausprobieren: https://regex101.com/ –

+0

bekomme ich keine Ausgabe beim Ausführen des Python-Skripts kann jemand mich mit bestimmten Regex führen? – GoluBoss

Verwandte Themen