查看原文
其他

Python标准库re:正则表达式

高金凤 Stata and Python数据分析 2022-03-15

暑期Stata培训班招生啦!!!接力线上的网课培训,我们在今夏又开始新一轮的线下培训啦!8月4日至12日,爬虫俱乐部期待与您的相遇!培训具体内容详见推文《暑期Stata编程技术定制培训班》。

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部资深高级会员为您排忧解难!


正则表达式Regular Expression)是用来匹配字符串的强有力武器,在数据处理有着不容小觑的地位。想要使用python的正则表达式功能需要调用re模块,re模块为高级字符串处理提供了几乎所有的正则表达式,包括字符串的匹配替换检索等。

在脚本中引入re模块的方法很简单,只需输入命令语句import re即可。今天,我们先为大家介绍该模块中常用几个的字符串函数。

(1)match函数

功能:从字符串的起始位置匹配一个正则表达式,如果匹配成功则返回一个匹配的对象,如果不是起始位置匹配成功的话,match函数就返回None

语法:     

re.match(pattern,string,flags=0)

其中,参数pattern:是一个正则表达式,参数string:表示要匹配的字符串;参数flags用于控制正则表达式的匹配方式,如:re.I代表区分大小写,re.S代表使正则表达式的元字符“.”匹配包括换行符\n在内的所有字符等等。

       举个小例子:首先,我们导入re库并定义一个字符串:

import re
str='stata club'

  我们想要匹配字符串str中的字符“a”,若执行如下命令:

print(re.match(r'a',str)

 得到结果:

我们发现,字符串str起始位置的字符不是“a”,所以函数re.match的匹配结果是None

(2)search函数

        功能search 扫描整个字符串并返回第一个成功的匹配,如果匹配成功search函数返回第一个匹配到的对象,否则返回None

        语法re.search(pattern, string, flags=0),每一个参数的含义同上

同样,我们用函数search匹配字符串str中的字符“a”:

print(re.search(r'a',str))

得到结果:

可以看到:search函数匹配到了字符“a”,且只匹配一次,并返回匹配的起始和结束位置的元组分别为230表示初始位置)。

(3)findall函数

         功能:在字符串中找到正则表达式所匹配的所有子字符串,并返回一个列表,如果没有找到匹配成功的,则返回空列表

         语法re.findall (pattern, string,flags=0),每一个参数的含义同上。

       那么,用函数findall匹配字符串str中的字符“a”,又会出现的怎样的结果呢?

print(re.findall(r'a',str))

结果如下:

可以看到,findall函数则将返回一个所有匹配的字符串的字符串列表,也就是findall函数查找到了所有的匹配结果。

学习了这三个函数的基本区别,我们来看看这三个函数与正则表达式中一些元字符的搭配使用:

(1)match函数

str1 = 'Wen0128Yue0625Feng1004Lu0721'
h=re.match(r'[a-z]{3}',str1,re.I)  # [a-z]表示所有的小写字母,{3}表示匹配三个
print(h.group())  #返回匹配到的完整字符串
print(h.span())  #返回匹配的起止位置的元组

得到结果

可以看到匹配到的字符串Wen01,返回的匹配起止位置的元组是(0,5

(2)search函数

str2="08116 zhongnancai 430070 tongshu "
m=re.search(r'\d+',str2) #“\s”表示匹配空白字符,“+”表示匹配一次或多次
print(m.group())
print(m.end()) #返回匹配的结束位置的元组

得到结果

可以看到匹配到的字符串08116,返回的匹配终止位置的元组5

(3)findall函数

str3="abc188ef9431g6666"
n=re.findall(r'\d+',str3)
print(n)

 得到结果

可以看到返回的是个列表,并且返回了字符串中所有匹配到子字符串

总结一下:即函数 matchsearch匹配一次,匹配不到返回None,而函数findall查找所有匹配结果。

以上就是我们今天介绍的3个字符串函数与正则表达式搭配使用的方法以及它们的用法区别,不过正则表达式的内容远不止此,在后面的推文中我们会相继介绍其他相关内容,与大家一起交流学习哟~


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

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

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


                                   




             文字编辑:赵宇亮

  技术总编:刘贝贝

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Mata中的数据导出至Excel

7.谈谈图形中坐标设置的技巧

8.如何输出某个关键词在字符串中的所有位置?

9.想看什么书?Stata君帮你寻!——爬取中南财大图书馆书目信息

10.爬虫俱乐部隆重推出网上直播课程第一季




关于我们

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

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

投稿邮箱:statatraining@163.com

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

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

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