我有一个类似于x\y\z
x, y and z
的长度可能会有所不同,但它们都有两个斜杠\
如何在第二个\
之前替换部件(包括其自身)以及其他一些值?
我尝试了这个,但它没有工作:
replace newvar=ustrregexra(oldvar, "\", "", 2)
它给了我一个空白的newvar
。
答案 0 :(得分:0)
字符串操作的个人法则是正则表达式很好,但通常有一种更简单,更直接的方法来解决问题。
关于你告诉我们的事情,问题会缩小到
查找最后一个(第二个)反斜杠\
的位置。
通过其他内容替换字符。
这是一种方法:
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 |
+------------------------------------------+
解决方案并不依赖于替换文本是固定字符串,因为可以使用字符串表达式。
这个问题的正则表达式解决方案必须首先认识到正则表达式中的反斜杠有自己的作用。
从您的问题来看,您需要处理Unicode的函数并不明显。
另见split
。您可以在反斜杠上split
,然后使用生成的最后一个变量。