Ein persönliches Gesetz für Stringmanipulationen ist, dass reguläre Ausdrücke großartig sind, aber es gibt oft einen einfacheren und direkteren Weg, das Problem zu lösen.
auf, was Sie uns erzählt haben, reduziert sich das Problem auf
Suche nach der Position des letzten (zweiten) Backslash \
.
Ersetzen von Zeichen bis einschließlich durch etwas anderes.
Hier ist eine Möglichkeit, es zu tun:
clear
set obs 2
gen foo = cond(_n == 1, "frog\toad\newt", "dragon\griffin\unicorn")
gen bar = "whatever" + substr(foo, strrpos(foo, "\") + 1, .)
list
+------------------------------------------+
| foo bar |
|------------------------------------------|
1. | frog\toad\newt whatevernewt |
2. | dragon\griffin\unicorn whateverunicorn |
+------------------------------------------+
Die Lösung hängt nicht auf dem Ersetzungstext eine feste Zeichenfolge sein, als ein String-Ausdruck stattdessen verwendet werden könnte.
Eine Lösung für reguläre Ausdrücke für dieses Problem müsste mit der Erkenntnis beginnen, dass umgekehrte Schrägstriche in regulären Ausdrücken ihre eigene Rolle haben.
Es ist nicht offensichtlich aus Ihrer Frage, dass Sie Funktionen benötigen, die mit Unicode umgehen.
Siehe auch split
. Sie könnten split
auf Backslashes verwenden und dann die letzte so erzeugte Variable verwenden.