2016-08-02 13 views
0

Lassen Sie uns die folgende Vorlage betrachten:Ist es möglich, reguläre Ausdrücke (oder allgemeinere Vorlagen) zu verwenden, um Variablen zu definieren?

*aaa*bbb* 

Es sollte alle Strings zurück, die aaa sowie bbb als Unterketten (mit der Einschränkung, dass bbb nach aaa kommt) enthalten.

Was ich will, haben die Möglichkeit, Teilketten zu verwenden, die (1) vor aaa, (2) zwischen aaa und bbb sowie (3) nach bbb (einige dieser Unterketten leer sein könnte). Also, im Grunde möchte ich wissen, was hinter jedem Stern steht. Genauer gesagt, möchte ich diese drei Unterzeichenfolgen verwenden, um eine neue Zeichenfolge (Ausgabe) zu erstellen.

Zum Beispiel könnte ich die erste und die zweite Teilzeichenfolgen austauschen möchten, setzen Sie ccc zwischen ihnen und entfernen Sie die letzte Teilzeichenfolge (sowie und bbb). Was ich will, in der folgenden formalen Art und Weise ausgedrückt kann tun werden:

{?x1}aaa{?x2}bbb{?x3} -> {?x2}ccc{?x1} 

Bitte beachte, dass ich * von {?x1}, {?x2} und {?x1} ersetzt haben. Auf diese Weise definiere ich drei Variablen, die ich später verwende.

Zum Beispiel, wenn ich XXXaaaYYYbbbZZZ als Eingabe haben, sollte ich die folgende Zeichenfolge als Ausgabe erzeugen: YYYcccXXX

ADDED

Meine Frage ist, ob es eine flexible Template-Sprache ist, die definiert ermöglicht auch "Variablen" (Teile der ursprünglichen Eingabesequenz, die zur Definition einer neuen Ausgabesequenz verwendet werden können). Ich sollte wahrscheinlich hinzufügen, dass ich eine Python-Lösung brauche.

+0

@anubhava, ich habe meine Frage korrigiert. – Roman

+1

Klingt wie Sie wollen Referenzen, die Teil der meisten regulären Ausdruck Bibliotheken sind, einschließlich Pythons. Z.B. 're (" (. *) aaa (. *) bbb (. *) ", r" \ 2ccc \ 1 "," XXXaaaYYYbbbZZZ "). – jpkotta

+0

@jpkotta, danke. Es ist genau das, was ich brauchte! Übrigens, warum hast du es nicht als Antwort (anstatt als Kommentar) gepostet? – Roman

Antwort

1

Klingt wie Sie wollen Referenzen, die Teil der meisten regulären Ausdruck Bibliotheken sind, einschließlich Python.

ccc_str = re.sub("(.*)aaa(.*)bbb(.*)", r"\2ccc\1", "XXXaaaYYYbbbZZZ")