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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • Python中的正则表达式(re) import rere.match #从开始位置开始匹配,如果开头没有则无re...
    BigJeffWang阅读 7,050评论 0 99
  • Day 17 补充 重载:函数的重载 -- 函数名相同但是参数不同的函数可以有多个,但是python不支持函数...
    晓晓_007f阅读 340评论 0 1
  • 搞懂Python 正则表达式用法 Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一...
    厦热阅读 1,568评论 0 2
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,136评论 0 9
  • 阳光明媚的一天,教学楼的周围醒目的张贴着一条条关于考研的条幅,不由得使得周围的空气开始凝结起来。有点沉重,有点压抑...
    程娅娅阅读 449评论 0 2