2016-06-09 30 views
3

Hallo Ich habe ein Skript, um durch einen Notizblock von Zahlen mit einer Reihe von Regex zu gehen. Meine Regex funktionieren mit Ausnahme einiger Werte, die nicht richtig angezeigt werden. Zum Beispiel werden einige Zahlenbeispiele wie 11111-C00 oder 22222-X01 nur als 11111 und 22222 zurückgegeben und enthalten nicht "-" und was danach passiert. Ich habe auch ein paar Fälle, die im Format enden: Nummer, Briefnummer. Diese 2 Regex geben mir nicht mein gewünschtes Ergebnis: d {4,5} - \ w {1} \ d {2} und \ d {4} - \ w \ d {1} \ wRegex Python gibt kein gewünschtes Ergebnis zurück

Voll Code:

import re 

filename = 'Text.txt' 
pattern = '\d{4,5}-\d{2,3}|\d{4,9}|\w{3}\d-\d{2}|\d{4,5}-\w{1}\d{2}|\b|\d{4}-\w\d{1}\w' 
new_file = [] 

with open('Text.txt', 'r') as f: 
lines = f.readlines() 

for line in lines: 
match = re.search(pattern, line) 
if match: 
     new_line = match.group() + '\n' 
     print new_line 
     new_file.append(new_line) 

with open('NewText.txt', 'w') as f: 
f.seek(0) 
f.writelines(new_file) 

Also alle meine regex die arbeiten gut mit Ausnahme der letzten 2 (d {4,5} - \ w {1} \ d {2} und \ d {4} - \ w \ d {1} \ w) für Muster wie XXXXX-LXX und XXXXX-LXL, wobei X eine Zahl und L ein Buchstabe ist und nur als XXXX oder XXXXX zurückgegeben wird. Wo gehe ich falsch?

+0

Sie suchen nach '\ d {4,9}' 'vor 'd {4,5 } - \ w {1} \ d {2} 'und' \ d {4} - \ w \ d {1} \ w'. Prüfen Sie, ob Sie diese Option auf '\ d {4,5} - \ d {2,3} | \ w {3} \ d- \ d {2} | \ d {4,5} - \ w {1} setzen. \ d {2} | \ b | \ d {4} - \ w \ d {1} \ w | \ d {4,9} 'löst dein Problem –

Antwort

0

Es entspricht 11111, weil in Ihrem Wechsel der Zweig zuerst übereinstimmt. Ändern Sie die Reihenfolge an:

\d{4,5}-\d{2,3}|\w{3}\d-\d{2}|\d{4,5}-\w{1}\d{2}|\b|\d{4}-\w\d{1}\w|\d{4,9} 

Siehe demo

Sie Abwechslung sehen können, wie:

Input = 11111-C00 
Regex = \d{4,5}-\d{2,3}|\w{3}\d-\d{2}|\d{4,9}|\d{4,5}-\w{1}\d{2}|\b|\d{4}-\w\d{1}\w 

Does Input matches \d{4,5}-\d{2,3} ? NO, Then, 
Does Input matches \w{3}\d-\d{2} ? NO, Then, 
Does Input matches \d{4,9} ? YES, Match found, stop looking 
+0

Danke, ich dachte mir, es war so einfach! – lucyb

Verwandte Themen