Regex 基于其他字符串变量提取新变量中的字符串模式

Regex 基于其他字符串变量提取新变量中的字符串模式,regex,stata,string-matching,Regex,Stata,String Matching,考虑以下变量: clear input str18 string "abc bcd cde" "def efg fgh" "ghi hij ijk" end 我可以使用regexm()函数提取所有出现的abc、cde和def: generate new = regexm(string, "abc|cde|def") list |string new | |--------------------| | abc bcd cde 1 | |

考虑以下变量:

clear

input str18 string
"abc bcd cde"        
"def efg fgh"
"ghi hij ijk"    
end
我可以使用
regexm()
函数提取所有出现的
abc
cde
def

generate new = regexm(string, "abc|cde|def")

list

|string          new |
|--------------------|
|  abc bcd cde     1 |
|  def efg fgh     1 |
|  ghi hij ijk     0 |
我怎样才能得到以下信息

|string            wanted  |
|--------------------------|
|  abc bcd cde     abc cde |
|  def efg fgh     def     |
|  ghi hij ijk             |
此问题是此处所回答问题的延伸:

    • 我把这当作你的

    • 有一个允许的单词列表

    • 希望字符串中的单词出现在允许的单词中

    • 为这类问题寻求一种奇特的正则表达式解决方案是一种时尚,但您的示例至少会让现有的单词变成一个简单的循环。但是,请注意,
      inlist()
      已经公布了限制

      clear
      
      input str18 string
      "abc bcd cde"        
      "def efg fgh"
      "ghi hij ijk"    
      end
      
      generate wanted = "" 
      
      generate wc = wordcount(string) 
      summarize wc, meanonly 
      
      quietly forvalues j = 1/`r(max)' { 
          replace wanted = wanted + " " + word(string, `j') if inlist(word(string, `j'), "abc", "cde", "def")
      } 
      
      replace wanted = trim(wanted) 
      
      list 
      
           +----------------------------+
           |      string    wanted   wc |
           |----------------------------|
        1. | abc bcd cde   abc cde    3 |
        2. | def efg fgh       def    3 |
        3. | ghi hij ijk              3 |
           +----------------------------+
      

      这是使用正则表达式的解决方案:

      clear
      
      input str18 string
      "abc bcd cde"        
      "def efg fgh"
      "ghi hij ijk"    
      end
      
      generate wanted = ustrregexra(string, "(\b((?!(abc|cde|def))\w)+\b)", " ")  
      replace wanted = strtrim(stritrim(wanted))
      
      list
      
           +-----------------------+
           |      string    wanted |
           |-----------------------|
        1. | abc bcd cde   abc cde |
        2. | def efg fgh       def |
        3. | ghi hij ijk           |
           +-----------------------+
      
      术语列在Stata中仅适用于矩阵或表的列。