有问必答:聊聊正则表达式里的转义字符

2017-10-02 张学人 爬虫俱乐部 爬虫俱乐部

点击上方蓝字关注这个神奇的公众号

hello!诸君安!

近日有位朋友问了这么一个问题:他想将形如’A|B’字符串中的B提取出来,但是使用正则表达式一直无法成功,这该怎么办呢?

爬虫君看到这个问题时心中暗喜,它看似简单,但却富有启发,下面让爬虫君细细说来。

1

匹配元字符本身?——转义

在正则表达式中,存在着一些“特殊字符”,我们称之为元字符。正则表达式元字符是代表着特殊含义的字符,包括基本元字符、数量元字符、位置元字符等,当用这些元字符匹配文本时,如果要表示“元字符”本身,而不是其代表的特殊含义,就需要对元字符进行转义转义的方法也很简单,在正则表达式中的元字符前面加上”\”即可。

以下两个正则表达式,一个未对元字符转义,一个进行了转义。元字符”|”代表逻辑“或”操作符。

set obs 1

gen  result="blue|glue"
gen result2=ustrregexs(1) if ustrregexm(result,"|(.*)")

gen result3=ustrregexs(1) if ustrregexm(result,"\|(.*)")

list

我们可以看到,未对元字符转义的正则表达式匹配失败,后者则匹配成功,匹配到了glue字符串。

现在我们来看一看这位粉丝的问题。

use "D:\stataABC\转义字符\PROVINCE_NAME.dta"
list

数据集给出了中国34个省级行政区域的名称,其中部分观测值的形式是 繁体|简体 现在我们只想要简体,而去掉繁体。 如果将表达式直接写成”|(.*)”的形式,则匹配不到字符串中的|字符,这也是粉丝反应的无法提取的原因。正确方案是对元字符|进行转义:

replace province=ustrregexs(1) if ustrregexm(province,"\|(.*)")

或者我们使用 ustrregexra 进行替换。

(1)replace province=ustrregexra(province,".+\| ","")

(2)replace province=ustrregexra(province,".+\|(.*)","$1")

ustrregexra是正则表达式替换函数,它将所有正则表达式匹配到的字符串都换成指定字符串,我们以上式为例,第一个参数(province)是要替换的变量,第二个参数(".+\| ")是正则表达式要匹配的文本,第三个参数是所要替换成的子字符串。

(1)式是将元字符|以及其之前的内容全部置换为空

(2)式使用回溯引用,$1表示将前面匹配到的文本替换成第一个子表达式(即(.*)里的内容)

2

split命令——更快更易懂

事实上,除了正则表达式,Stata还有更方便的命令处理类似的问题,它就是split。

split命令可以将指定变量内容依据给定的特殊字符进行自动分割,在处理上更加直观, 在这个问题中,我们以”|”作为分割的字符

use "D:\stataABC\转义字符\PROVINCE_NAME.dta"

split province,parse(|)

list

我们可以看到,由于部分观测值没有|符号,因此它们的简体字被归到了province1中,此时我们只需要将province2为空的观测值的province1的值赋给province2即可。

replace province2=province1 if province2==""

list

看不懂的记得戳下方视频哦~


 注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                        文字编辑:王凯丽

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号