美文网首页stata小小白
stata命令详解-函数regexm/regexr/regexs

stata命令详解-函数regexm/regexr/regexs

作者: Hobbit的理查德 | 来源:发表于2020-01-29 12:45 被阅读0次

    1. 前言

    在目前工作中,用stata清洗及分析数据,感觉很顺滑。无奈不少同学因为help文件里的英文望而却步。

    带着学习和分享的目的,根据工作经验,给大家整理一些常用以及不太常用但很有用的命令,并对该命令的help文件进行有侧重的详解。

    2. 描述

    regexm(s,re):字符串函数。字符串匹配函数。当字符串s符合正则表达式re时,返回1,否则返回0.

    regexr(s1,re,s2):字符串函数。字符串替换函数。将符合正则表达式re的字符串s1中的第一个子字符串替换未字符串s2,并返回替换后的结果字符串。

    • 当字符串s1中不包括符合正则表达式re的子字符串时,返回字符串s1

    regexs(n):字符串函数。与regexr结合使用。返回regexm(s,re)第n个子表达式对应的子字符串。如果n=0,则表示返回所有符合正则表达式的字符串。

    3. 参数

    • regexm(s,re)

    s:ASCII码的字符串

    re:正则表达式

    • regexr(s1,re,s2)

    s1:ASCII码的字符串

    re:正则表达式

    s2:ASCII码的字符串

    • regexs(n)

    n:取值范围:0 ≤ n < 10

    4. 举例

    *调入自带数据auto
    sysuse auto
    *列出变量make中以B字母开头的数据
    generate bbegin = regexm(make, "^B")
    list make if bbegin == 1
    *同上
    list make if regexm(make, "^B") == 1
    
    bbegin.png
    *列出变量中包含ck字符串的数据
    list make if regexm(make, "ck") == 1
    
    ck.png
    *列出变量make中以数字结尾的数据
    list make if regexm(make, "[0-9]$") == 1
    
    digit.png
    *生成新变量make2(通过复制变量make)
    generate make2 = make
    *将变量make2中以B字母开头,3个数字+小写字母结尾的数据替换成found
    replace make2 = regexr(make2, "^B.*[0-9][0-9][0-9][a-z]$", "found")
    *将变量make和make2不一样的两个变量显示出来
    list make make2 if make != make2
    
    make2.png
    *清除内存数据
    clear
    *输入变量number
    input str15 number
                             number
                 1. "(123) 456-7890"
                 2. "(800) STATAPC"
                 3. end
    *将变量number中的(123) 456-7890转为123-456-7890形式,其中,regexs(1)表示符合第1个子表达式[0-9]+,即括号中的数字的字符串;regexs(2)表示符合第2个子表达式.*,即)后的所有内容。
    gen str newnum = regexs(1) + "-" + regexs(2) if regexm(number,"^\(([0-9]+)\) (.*)")
    *列出变量number和newnum
    l number newnum
    
    number.png

    5.补充

    • 上述例子中涉及正则表达式(regular expression)中的元字符
    元字符 含义 举例
    \ 后向引用,后面跟正则表达式中的某个元字符,表示匹配该符号。类似于转义。 \\匹配\\-匹配-
    ^ 在表达式的开头位置,表示接下来的表达式所要匹配的内容位于字符串的开始的位置。 ^B表示以B开头;^\(表示以(开头
    $ 在表达式的结尾位置,表示钱买你的表达式所要匹配的内容位于字符串结尾的位置。 [0-9]$表示以数字结尾
    * 表示将前一个字符或子表达式匹配任意次数,可以为0次。 XY*可以匹配X,也可以匹配XY,XYY,XY.....Y
    + 表示将前一个字符或子表达式匹配至少1次。 XY+可匹配XY,XYY,XY.....Y,但不可匹配X
    ? 表示将前一个字符或子表达式匹配0次或1次。 XY?可匹配XXY
    {n} n为一个非负整数,表示将前一个字符或子表达式匹配n次。 XY{2}匹配XYY;只能用于以ustr开头的4个正则表达式的字符串函数中
    . 表示可以匹配任意字符 .*可以匹配任意字符或者不匹配任何字符。
    () 创建一个子表达式,可以提取或者替换括号内的子表达式对应的字符串 ^\(([0-9]+)\) (.*)可拆成^,\(,([0-9]+),\),(.*),其中,([0-9]+),(.*)为子表达式
    - 指定一个范围 a-z:字母a到字母z范围的小写字母;A-Z:字母A到字母Z范围的大写字母;0-9:数值0-9范围内的数字。
    [] 方括号内的字符之一被用来进行匹配 [a-z]可以匹配a-z范围内的任意小写字母

    来源:http://www.360doc.com/content/16/1223/13/39103730_617058825.shtml

    • 序列
    正则表达式 含义
    \d 匹配数字字符
    \D 匹配非数字字符
    \s 匹配间隔符(空格)
    \S 匹配非间隔符(非空格)
    \w 匹配单词字符
    \W 匹配非单词字符
    \b 匹配词界
    \B 匹配非词界

    来源:https://blog.csdn.net/arlionn/article/details/85156842

    • 常用正则表达式
    正则表达式 含义
    [\u4e00-\u9fa5] 匹配中文字符
    [^\x00-\xff] 匹配双字节字符(包括汉字在内)
    \n\s*\r 匹配空白行
    <(\S*?)[^>]*>.*?</\1>|<.*? /> 匹配HTML标记
    ^\s*|\s*$ 匹配首尾空白字符
    \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配Email地址
    [a-zA-z]+://[^\s]* 匹配网址URL
    ^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
    \d{3}-\d{8}|\d{4}-\d{7} 匹配国内电话号码
    [1-9][0-9]{4,} 匹配腾讯QQ号(腾讯QQ号从10000开始)
    [1-9]\d{5}(?!\d) 匹配中国邮政编码(中国邮政编码为6位数字)
    \d{15}|\d{18} 匹配身份证(中国的身份证为15位或18位)
    \d+\.\d+\.\d+\.\d+ 匹配ip地址

    来源:https://blog.csdn.net/wangjia55/article/details/7877915

    相关文章

      网友评论

        本文标题:stata命令详解-函数regexm/regexr/regexs

        本文链接:https://www.haomeiwen.com/subject/nbmvthtx.html