STATA 正则表达式应用

发布时间 2023-10-20 20:18:18作者: myrj
​​1、匹配函数:regexm()和ustrregexm()

(1)regexm(s,re)函数

第一个参数s表示字符串,第二个参数re代表正则表达式,如果正则表达式匹配到字符串s中的某个子字符串,则函数regexm(s,re)的返回值为1,否则为0。但是值得注意的是,由于regexm()是早期版本的正则表达式函数,所以不能识别元字符。

(2)ustrregexm(s,re,[,noc])函数

若正则表达式re能与字符串s中的某个子字符串匹配,则返回值为1,否则为0。在默认情况下,匹配是区分大小写的,但是如果定义noc为一个非零数值,则匹配时不区分大小写。

2、不用正则表达式匹配:strmatch(s1,s2)和strpos(s1,s2)

(1)strmatch(s1,s2)函数

如果字符串s2能够完全匹配字符串s1,则返回值为1,否则为0。在字符串s2中,可以使用通配符?匹配任意一个字符,用通配符*匹配零个或任意多个字符。但要注意的是字符串s2与整个字符串s1匹配时,返回值才是1。而ustrregexm(s,re,[,noc])只要正则表达式re能匹配到字符串s中任意一个子字符串,返回值即为1。

(2)strpos(s1,s2)或index(s1,s2)函数

strpos(s1,s2)和index(s1,s2)其实是同一个函数,如果字符串s2是s1的子字符串,则strpos()返回值是s2首字符在s1中的位置。

3、提取函数:regexs()和ustrregexs()

匹配函数和提取函数一般需要配合使用,先匹配后提取。习惯地将regexm()与regexs()、ustrregexm()与ustrregexs()分别配合使用。

(1)regexs(n)函数

参数n为非负整数,表示提取regexm(s,re)函数匹配到地第n个子字符串。若n为0,则表示把整个正则表达式匹配到地内容全部提取出来。

(2)ustrregexs(n)函数

类似于regexs(n)函数,该函数提取出地字符串为ustrregexm(s,re,[,noc])函数中第n个子字符串匹配到的子字符串。若n=0,则提取整个正则表达式匹配到的内容。

4、替换函数:regexr()、ustrregexrf()和ustrregexra()

subinstr(s1,s2,s3,n)可以实现替换功能,表示将字符串s1中的前n个子字符串s2替换成字符串s3,如果n定义为.则表示将s1中出现的所有s2都替换成s3。但是该函数不能结合正则表达式使用。

(1)regexr(s1,re,s2)函数

将正则表达式re在字符串s1中匹配到的子字符串替换为字符串s2。但是该函数不能识别元字符。

(2)ustrregexrf(s1,re,s2,[,noc])和ustrregexra(s1,re,s2,[,noc])

ustrregexrf(s1,re,s2[,noc])中的f表示first,即将正则表达式re在字符串s1中匹配到的第一个子字符串替换为s2。ustrregexra(s1,re,s2[,noc])中的a表示all,即将正则表达式re在字符串s1中匹配到的所有子字符串都替换为s2。若向noc传递一个非零数字,表示在匹配时不再区分大小写。