我在Stata中有一个字符串变量,其中包含以下条目:
110xyz 43 abc
110xyz 44 abc
111 xyz 56 abc
关键是有时第一组数字(长度从1到5位不等)在下一个单词开始之前没有后跟空格(可以是1到50个字母长的任何一个)。是否有一种巧妙的方法来插入空格来分隔数字和单词? (110 xyz
将是上述示例中的预期结果)我尝试了regexr()
,但这并没有帮助。
答案 0 :(得分:3)
regexr()
出了什么问题?它似乎正是使用的工具,所以也许它是你遇到麻烦的正则表达式。
我的Stata语法可能有些偏差,但尝试这样的事情:
gen string = "110xyz 43 abc"
gen number = regexs(1) if regexm(string, "^([0-9]+) *([a-zA-Z].*)")
gen remain = regexs(2) if regexm(string, "^([0-9]+) *([a-zA-Z].*)")
gen fixed = number + " " + remain
这可以简化,但是我启动你的工作概率最高,例如保证匹配,因为我不知道什么样的空值结果如果regexm()
不匹配。
答案 1 :(得分:2)
moss
为Stata的正则表达式函数提供了一个便利包装器。示范:
clear
input str16 test
"110xyz 43 abc"
"110xyz 44 abc"
"111 xyz 56 abc"
end
ssc inst moss
help moss
moss test, match("([0-9]+)") regex pre(num)
moss test, match("([a-z]+)") regex pre(word)
list test *match*
+------------------------------------------------------------+
| test nummat~1 nummat~2 wordma~1 wordma~2 |
|------------------------------------------------------------|
1. | 110xyz 43 abc 110 43 xyz abc |
2. | 110xyz 44 abc 110 44 xyz abc |
3. | 111 xyz 56 abc 111 56 xyz abc |
+------------------------------------------------------------+