如何在Stata中查找和替换此字符串?

如何在Stata中查找和替换此字符串?,stata,Stata,我有一个字符串变量,看起来像x\y\z x、y和z的长度可能不同,但它们都有两个斜杠\ 如何用其他值替换第二个\之前的零件(包括其本身) 我试过了,但没用: 替换newvar=ustregexra(oldvar,“\”,“,”,2) 它给了我一个空白的newvar字符串操作的个人法则是正则表达式很棒,但通常有一种更简单、更直接的方法来解决这个问题 根据你告诉我们的,问题归结为 查找最后(第二)个反斜杠的位置\ 用其他字符替换包含该字符的字符 以下是一种方法: clear set obs 2

我有一个字符串变量,看起来像
x\y\z

x、y和z的长度可能不同,但它们都有两个斜杠
\

如何用其他值替换第二个
\
之前的零件(包括其本身)

我试过了,但没用:

替换newvar=ustregexra(oldvar,“\”,“,”,2)


它给了我一个空白的
newvar

字符串操作的个人法则是正则表达式很棒,但通常有一种更简单、更直接的方法来解决这个问题

根据你告诉我们的,问题归结为

  • 查找最后(第二)个反斜杠的位置
    \

  • 用其他字符替换包含该字符的字符

  • 以下是一种方法:

    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
    。您可以在反斜杠上拆分
    ,然后使用生成的最后一个变量