2016-04-11 7 views
0

Ich habe ein Textdokument mit einer bestimmten Anzahl von SIGMETs (Luftfahrt-Nachrichten) in einer Datei, zum Beispiel:RegEx: Wie beginnend mit Übereinstimmen und endend mit

BGGL SIGMET 3 VALID 281815/282215 BGSF- 
BGGL SONDRESTROM FIR SEV TURB FCST AT 1815Z WI N7900 W02550 - 
N8200 W01150 - N8130 W00805 - N7540 W01815 - N7540 W02440 - N7900 
W02550 SFC/FL080 STNR NC= 

ENBD SIGMET C01 VALID 281530/281930 ENVV- 
ENOR NORWAY FIR OCNL SEV MTW FCST WI N6200 E00530 - N6300 E00830 - 
N6300 E01030 - N6200 E01000 - N6200 E00530 SFC/FL260 STNR NC= 

ENSV SIGMET B02 VALID 281500/281900 ENVV- 
ENOR NORWAY FIR OCNL SEV TURB FCST WI N5900 E00730 - N5900 E00530 - 
N6200 E00530 - N6200 E00730 - N5900 E00730 SFC/FL180 STNR NC= 

Der Beginn einer SIGMET wird nach mit Dieses Format: /([A-Z]{4}) (AIRMET|SIGMET) (\w{1,3}) VALID (\d{6}\/\d{6}) ([A-Z]{4})-/ und endet immer mit /(WKN|NC|INTSF)=/.

Wie kann ich eine RegEx für jedes SIGMET erstellen?

Vielen Dank im Voraus

P.S. Ich benutze JavaScript.

+0

Möchten Sie zwischen diesen oder einschließlich dieser öffnenden und schließenden Tags? –

+0

Siehe [diese Antwort] (http://stackoverflow.com/a/7504859/3832970). Und lesen Sie die Kommentare darunter. Da ist deine Antwort. Es kann etwas sauberer sein, wenn Ihre Regex-Engine einen Single-Line-Modus unterstützt. –

+0

Mit der Kaore-Antwort (Wiktor) ist das Match vom Anfang des ersten SIGMET bis zum letzten, ich möchte sie trennen. – Liuz

Antwort

0
import re 


with open('a.txt') as file: 
    data = '\n\n' + file.read() + '\n\n' 

pattern = r'\n\n' + r'([A-Z]{4}) (AIRMET|SIGMET) (\w{1,3}) VALID (\d{6}\/\d{6}) ([A-Z]{4})-.*?(WKN|NC|INTSF)=' + r'\n\n' 
pattern_compiled = re.compile(pattern, re.DOTALL) 

res = pattern_compiled.finditer(data) 

if res: 
    for i in res: 
     print(i) 
     print(i.group()) 
else: 
    print('Not found') 
Verwandte Themen