2017-06-01 3 views
0

Ich habe eine String-Variable, die wie dieser kann x\y\zWie finden und ersetzen Sie diese Zeichenfolge in Stata?

Die Länge x, y and z sieht variieren, aber sie alle haben zwei Schrägstriche \

Wie kann ich den Teil vor dem zweiten \, einschließlich sich selbst ersetzen, mit einigen anderer Wert?

habe ich versucht, diese aber es hat nicht funktioniert:

replace newvar=ustrregexra(oldvar, "\", "", 2)

Es ist mir eine leere newvar gab.

Antwort

0

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

  1. Suche nach der Position des letzten (zweiten) Backslash \.

  2. 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.

Verwandte Themen