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

Posted 爬虫俱乐部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有问必答:聊聊正则表达式里的转义字符相关的知识,希望对你有一定的参考价值。

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有问必答:聊聊正则表达式里的转义字符

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

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

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


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

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

                        文字编辑:王凯丽

技术总编:刘贝贝



往期推文推荐:



关于我们

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

投稿邮箱:statatraining@163.com

欢迎关注爬虫俱乐部

以上是关于有问必答:聊聊正则表达式里的转义字符的主要内容,如果未能解决你的问题,请参考以下文章

re模块 正则表达式

js中的正则表达式常用

Java 正则表达式 转义字符

python 正则表达式之转义字符

python正则表达式

转义正则表达式字符串