如何解决如何删除字符串变量Stata中除某些单词之外的所有内容?
我有一个字符串变量 response
,它包含文本以及已经编码的类别(“CatPlease”、“CatThanks”、“ExcuseMe”、“Apology”、“Mit”等类别) .)
我想删除 response
除了这些以前编码的类别中的所有内容。
例如,我希望将 response
更改为:
"I Mit understand CatPlease read it again CatThanks"
到:
"Mit CatPlease CatThanks"
这似乎是一个简单的问题,但我无法让我的正则表达式代码完美运行。
下面的代码尝试将类别存储在变量 cat_only
中。它仅在类别出现在 response
的开头时才有效。本地宏 cats
包含我想在 response
中保留的所有单词:
local cats = "(CatPlease|CatThanks|ExcuseMe|Apology|Mit|IThink|DK|Confused|Offers|CatYG)?"
gen cat_only = strltrim(strtrim(ustrregexs(1)+" "+ustrregexs(2)+" "+ustrregexs(3))) if ustrregexm(response,"`cats'.+?`cats'.+?`cats'")
如果我在 ustrregexm
中的搜索模式的开头添加字符,那么 cat_only
中将不会存储任何内容:
gen cat_only = strltrim(strtrim(ustrregexs(1)+" "+ustrregexs(2)+" "+ustrregexs(3))) if ustrregexm(response,".+?`cats'.+?`cats'.+?`cats'")
有没有办法修复我的代码以使其正常工作,或者我应该以不同的方式解决问题?
解决方法
我不认为自己精通 Stata 的正则表达式函数,但这可能会有所帮助:
. clear
. set obs 1
number of observations (_N) was 0,now 1
. gen test = "I Mit understand CatPlease read it again CatThanks"
. local OK "(CatPlease|CatThanks|ExcuseMe|Apology|Mit|IThink|DK|Confused|Offers|CatYG)"
. ssc install moss
. moss test,match("`OK'") regex
. egen wanted = concat(_match*),p(" ")
. l wanted
+-------------------------+
| wanted |
|-------------------------|
1. | Mit CatPlease CatThanks |
+-------------------------+
,
* Example generated by -dataex-. To install: ssc install dataex
clear
input str50 response
"I Mit understand CatPlease read it again CatThanks"
end
local regex "(?!CatPlease|CatThanks|ExcuseMe|Apology|Mit|IThink|DK|Confused|Offers|CatYG)\b[^\s]+\b"
gen wanted = strtrim(stritrim(ustrregexra(response,"`regex'","")))
list
. list
+-------------------------------------------------------------------------------+
| response wanted |
|-------------------------------------------------------------------------------|
1. | I Mit understand CatPlease read it again CatThanks Mit CatPlease CatThanks |
+-------------------------------------------------------------------------------+
,
可以使用正则表达式处理空格:
local words = "(?!CatPlease|CatThanks|ExcuseMe|Apology|Mit|IThink|DK|Confused|Offers|CatYG)\b\S+\b"
gen wanted = ustrregexra(response,"`words' | ?`words'","")
这使用交替(编码为 |
的正则表达式 OR)来匹配尾随/前导空格,当整个输入是目标词之一时,前导空格是可选的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。