查看原文
其他

正则表达式之多次匹配

爬虫俱乐部 Stata and Python数据分析 2023-02-21

本文作者:赵一帆,中南财经政法大学金融学院

本文编辑:智淼

技术总编:方一


Stata and Python 数据分析

     由李春涛教授团队成员司海涛薛原编写的《Stata正则表达式及其在财务数据中的应用》终于和大家见面啦!爬虫俱乐部特此为大家准备了100本,即日起购买爬虫俱乐部课程,可赠送本书一本,先到先得!


购书链接:


爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

导语

众所周知,我们在Stata中可以使用ustrregexm()ustrregexs()ustrregexrf()ustrregexra()四个函数对Unicode字符串进行正则匹配。最近,笔者发现,在使用ustrregexm()ustrregexs()进行正则匹配提取时,仅获得第一次匹配成功的文本。下面,我们就来看看该问题如何解决。

1

   ustrregexm()  仅匹配一次

例如,我们想要提取出《红楼梦》txt版本中所有的对话文本,用作称呼语的语料研究。我们首先想到使用ustrregexm()ustrregexs()来提取:

clear allimport delimited using "曹雪芹 红楼梦原文 白版.txt",encoding("utf-8")gen temp = ustrregexs(0) if ustrregexm(v1, "“(.*?)”") //由于要提取对话,(.*?)外面为中文双引号,最外层为英文引号

执行结果如下图所示:

显然,该命令只能提取出第一次匹配成功的对话文本。查看ustrregexm()ustrregexs()的help文件,也没有发现允许多次匹配的参数设置。这表明,如果同一字符串中有多句对话,该命令就无能为力了。

2

moss命令在多次匹配中的使用

moss命令是外部命令,使用之前需要先安装:

ssc install moss

安装完成后,help moss查看该命令的语法:

moss strvar [if] [in] , match(["]pattern["]) ///[regex prefix(prefix) suffix(suffix) maximum(#) unicode]

其中,starvar是字符串变量,可以对其使用条件筛选;match(["]pattern["])是我们想要匹配的字符串,如果你要匹配正则表达式,就需要添加regex选项;prefix(prefix)suffix(suffix)选项用于为新增字段名添加指定的前缀或后缀,但两者不可同时使用。使用maximum(#)可以指定匹配的最大次数(#);如果我们要对中文等Unicode字符进行处理,则需要使用unicode选项,否则该命令无法正常执行。现在,我们使用moss命令重新提取《红楼梦》中的对话文本:

clear allimport delimited using "曹雪芹 红楼梦原文 白版.txt",encoding("utf-8")moss v1, match("“(.*?)”") regex unicode

执行结果如下图所示:

可以看到moss不仅为我们找出了所有的对话文本(_match*),而且给出了每次匹配成功的位置(_pos*)以及匹配成功的次数(_count)。经过整理,我们可以导出所有被中文双引号“ ”包裹的对话文本:

keep _match*stack _match*, into(v1) drop if v1 == ""keep v1rename v1 中文对话export excel "conversation.xlsx",firstrow(var) replace

导出文件的截图如下所示:

以上就是使用moss命令解决正则表达式多次匹配问题的办法啦~另外,该命令在文本分析、语料分析时还可以用作词频统计哦。

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐 

        爬虫君为你的数据自由操碎了心!cnborder重磅推出!

      基于Python的假设检验实现      Stata与MySQL交互--基础操作           Jupyter Notebook中的魔术命令     《Stata正则表达式》由中国金融出版社出版发行          匿名函数lambda到底怎么用?

Stata绘图系列—NBER Working paper仿图

       Camelot:从PDF中提取表格数据      Stata之计算财务指标——融资约束

      列表生成式|让你的代码更简洁

Stata绘图系列——玩转绘图通用选项之坐标轴

       玩转地图的好帮手--pyecharts

       爬虫俱乐部又又又输送了一位研究助理!!!      【数据分析】一文教你玩转DataFrame

 震惊,爬虫俱乐部竟是这样运营答疑群的?!

【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新

带你玩转Stata编码一言不合就teamviewer

【基础篇】循环语句的continue与break

        教你用Stata爬取全国疫情风险地区数据,原来这么简单!       关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可

以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存