字符串中的单独数字和单词

时间:2016-02-21 20:38:34

标签: string stata space separator

我在Stata中有一个字符串变量,其中包含以下条目:

110xyz 43 abc 
110xyz 44 abc
111 xyz 56 abc

关键是有时第一组数字(长度从1到5位不等)在下一个单词开始之前没有后跟空格(可以是1到50个字母长的任何一个)。是否有一种巧妙的方法来插入空格来分隔数字和单词? (110 xyz将是上述示例中的预期结果)我尝试了regexr(),但这并没有帮助。

2 个答案:

答案 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)

来自SSC的

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 |
     +------------------------------------------------------------+