Stata正则表达式

Stata正则表达式,stata,Stata,我需要使用正则表达式来提取字符串变量的一部分。我的数据是这样的,其中a表示字母字符x,Z表示数字字符。我想提取“-”前面的Z字符 我的代码如下所示 gen p_id=regexs(1)如果regexm(var1,“([0-9][0-9][0-9])[-]*[0-9][0-9][0-9][-]*[a-zA-Z]*$”) 此代码提取的内容超过了所需的内容。例如,这段代码从如下观察中提取数值部分。具体来说,它提取ZZZ 我玩弄各种表情,但无法得到所需的答案 我认为您需要更好地描述可以呈现的值的结构。但

我需要使用正则表达式来提取字符串变量的一部分。我的数据是这样的,其中a表示字母字符x,Z表示数字字符。我想提取“-”前面的Z字符

我的代码如下所示

gen p_id=regexs(1)如果regexm(var1,“([0-9][0-9][0-9])[-]*[0-9][0-9][0-9][-]*[a-zA-Z]*$”

此代码提取的内容超过了所需的内容。例如,这段代码从如下观察中提取数值部分。具体来说,它提取ZZZ


我玩弄各种表情,但无法得到所需的答案

我认为您需要更好地描述可以呈现的值的结构。但是 那么:

clear
set more off

input ///
str30 x
"aaa 736 058 123-456-a"
"aaa 11 688 789-01"
"aaa 56789 aaa"
end

// original
gen p_id = regexs(1) ///
    if regexm(x, "([0-9][0-9][0-9])[-]*[0-9][0-9][-]*[ a-zA-Z]*$")

// modified
gen p_id2 = regexs(1) ///
    if regexm(x, "([0-9]*[-][0-9]*)")

list p_id*

我认为您需要更好地描述可以呈现的值的结构。但是 那么:

clear
set more off

input ///
str30 x
"aaa 736 058 123-456-a"
"aaa 11 688 789-01"
"aaa 56789 aaa"
end

// original
gen p_id = regexs(1) ///
    if regexm(x, "([0-9][0-9][0-9])[-]*[0-9][0-9][-]*[ a-zA-Z]*$")

// modified
gen p_id2 = regexs(1) ///
    if regexm(x, "([0-9]*[-][0-9]*)")

list p_id*

正如经常发生的那样,事先决定解决方案必须基于正则表达式只会使代码复杂化。根据您的描述,第一个“-”之前需要三个字符。那就是

 gen p_id = substr(var1, strpos(var1, "-") - 3, 3) 
测试示例:

 clear 

 input str21 var1
 "aaa xxx xxx 123-ZZZ-a"
 "aaa xx xxx 567-ZZ"
 end 

 gen p_id = substr(var1, strpos(var1, "-") - 3, 3) 

 list 

     +------------------------------+
     |                  var1   p_id |
     |------------------------------|
  1. | aaa xxx xxx 123-ZZZ-a    123 |
  2. |     aaa xx xxx 567-ZZ    567 |
     +------------------------------+

正如经常发生的那样,预先决定解决方案必须基于正则表达式只会使代码复杂化。根据您的描述,第一个“-”之前需要三个字符。那就是

 gen p_id = substr(var1, strpos(var1, "-") - 3, 3) 
测试示例:

 clear 

 input str21 var1
 "aaa xxx xxx 123-ZZZ-a"
 "aaa xx xxx 567-ZZ"
 end 

 gen p_id = substr(var1, strpos(var1, "-") - 3, 3) 

 list 

     +------------------------------+
     |                  var1   p_id |
     |------------------------------|
  1. | aaa xxx xxx 123-ZZZ-a    123 |
  2. |     aaa xx xxx 567-ZZ    567 |
     +------------------------------+
试一试

将regexs(1)与变量名一起更改为regexs(2)和regexs(3),以便在(-)之前生成其他数字

将regexs(1)与变量名一起更改为regexs(2)和regexs(3),以在(-)之前生成其他数字