2016-08-25 33 views
0

Ich brauche zu teilen eine Zeichenfolge wie folgt aufteilen:Python regulärer Ausdruck eine Zeichenfolge

{tab 3}1/*{tab}*/30116{tab}2012{tab, 2}01{tab}{2016}enter 

ich die Teile trennen will, die in und aus { sind und }

Die Idee zu machen ist ein Text-Interpreter für Befehle, die an Python übergeben werden pyautogui.

Das Ergebnis sollte in Ordnung sein, vielleicht eine Liste mit Befehlen und Strings.

[ 'tab, 3', '130116', 'tab', '2012', 'tab, 2', '01', 'tab', '2016', 'enter'] 

Die Reihenfolge ist wichtig. Mit Regex Tester ich dieses Muster haben:

re.compile (ur '(\{(|.)*\})', re.MULTILINE | re.IGNORECASE) 

Dies markiert alle Teile zwischen { und }. Aber ich weiß nicht, wie ich die Schnur extrahiere oder spalte.

Der Teil zwischen /* und */ Ich entferne bereits richtig, bevor Sie diesen Teil bekommen. Sie können es ignorieren.

Wenn möglich, möchte ich einen Pythonic Weg, um dies zu lösen. Ich beginne in Python, dafür muss ich die Lösung übersprungen haben.

Wenn es irgendwelche Fehler gibt, vergib mir. Ich bin aus Brasilien.

Wenn es schon einen anderen Dolmetscher gibt, bitte zeig es mir.

Vielen Dank im Voraus.

Alexandre

Übersetzt von Google translator.

Antwort

1

Ich verstehe, Kommentare werden bereits herausgefiltert, so dass ich eine einfache Lösung vorschlage, nicht sicher, es ist das "Pythonic", aber Pythonic genug und leicht zu erreichen.

Sie können re.split nach {} Zeichen und dann entfernen Sie die leeren Zeichenfolgen mit einem Aufruf an filter aus den leeren Zeichenfolgen.

import re 

r="{tab 3}130116{tab}2012{tab, 2}01{tab}{2016}enter" 

z = filter(lambda x : x!="",re.split("[{}]",r)) 

print(z) 

Ausgang:

['tab 3', '130116', 'tab', '2012', 'tab, 2', '01', 'tab', '2016', 'enter'] 

+0

Thanks @ Jean-François Fabre (es andere Möglichkeiten, ohne den Filterteil, es zu tun mit regex, komplexer sein kann). Seine Arbeiten und ich haben über Filter gelernt! –