考虑以下变量:
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 |
这个问题是在这里回答的一个扩展:
答案 0 :(得分:3)
我读为您的
具有允许的单词列表。
想要在允许的单词中出现的字符串中的单词。
为此类问题寻求理想的正则表达式解决方案是一种时尚,但是您的示例至少会对存在的单词产生简单的循环。但是请注意,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 |
+----------------------------+
答案 1 :(得分:1)
这是使用正则表达式的解决方案:
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 |
+-----------------------+