【发布时间】:2017-06-01 05:19:16
【问题描述】:
我有一个字符串变量,看起来像这样x\y\z
x, y and z 的长度可能会有所不同,但它们都有两个斜线\
如何将第二个 \ 之前的部分(包括它自己)替换为其他值?
我试过了,但没用:
replace newvar=ustrregexra(oldvar, "\", "", 2)
它给了我一个空白newvar。
【问题讨论】:
标签: stata
我有一个字符串变量,看起来像这样x\y\z
x, y and z 的长度可能会有所不同,但它们都有两个斜线\
如何将第二个 \ 之前的部分(包括它自己)替换为其他值?
我试过了,但没用:
replace newvar=ustrregexra(oldvar, "\", "", 2)
它给了我一个空白newvar。
【问题讨论】:
标签: stata
字符串操作的个人法则是正则表达式很棒,但通常有更简单、更直接的方法来解决问题。
根据你告诉我们的,问题归结为
查找最后一个(第二个)反斜杠 \ 的位置。
将字符替换为其他字符。
这是一种方法:
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,然后使用最后生成的变量。
【讨论】: