妙用正则表达式--Python中的re模块
Posted Stata and Python数据分析
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了妙用正则表达式--Python中的re模块相关的知识,希望对你有一定的参考价值。
文字编辑:钱梦璇
技术总编:张 邯
爬虫俱乐部将于2020年1月5日至11日在湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~详细培训大纲及报名方式,请点击《》或点击文末阅读原文呦~
我们在往期推文()当中介绍了re库的一些函数的用法,借用正则表达式,我们可以方便快捷地进行目标信息的提取。今天,小编将继续介绍几个函数。
(一)re.fullmatch
语法结构:fullmatch(pattern, string, flags=0)
其中,pattern是匹配要求(可以填正则表达式),string是用于匹配的字符串,flags是正则表达式的匹配方式。如果整个 string 匹配到正则表达式样式,就返回一个相应的匹配对象,否则就返回一个 None。
来看一个简单例子:
sentence = "This is an island."
print(re.fullmatch('is',sentence))
print(re.fullmatch('This is an island.',sentence))
返回的结果为:
None
<_sre.SRE_Match object; span=(0, 18), match='This is an island.'>
可见,fullmatch要求匹配全部字符,而不能只匹配部分。
当然,我们可以使用正则表达式来实现上一匹配目的,如查看string是否为非数字字符串:
print(re.fullmatch('\D+',sentence))
结果为:
<_sre.SRE_Match object; span=(0, 18), match='This is an island.'>
我们对比往期使用的search函数:
print(re.search('is',sentence))
结果为:
<_sre.SRE_Match object; span=(2, 4), match='is'>
可见,search函数是部分匹配,从左到右取第一个匹配到的内容。而fullmatch是全匹配。
(二)re.escape
语法结构:escape(pattern)
其中,pattern是待匹配的字符。escape函数可以对字符串中所有可能被解释为正则运算符的字符进行转义。
来看一个简单的例子:
s2='https://m.tb.cn/h.eIjvdhl?sm=8929f0'
print(re.escape(s2))
结果为:
https\:\/\/m\.tb\.cn\/h\.eIjvdhl\?sm\=8929f0
可以发现,在这一网址中,escape函数对“:”、“/”、“.”、“?”、”=”进行了转义。
接下来我们写一个数学运算符号的列表,使用escape函数转义一下:
operators = ['+','-','*','\']
for i in operators:
print(re.escape(i))
结果发现程序报错:
原因是”\”本来就代表转义符号,我们想引用它时,需要这样写:”\\”。
我们修改一下上述程序:
operators = ['+','-','*','\\']
for i in operators:
print(re.escape(i))
结果为:
\+
\-
\*
\\
此时我们就将具有正则表达式含义的字符成功转义了。
(三)re.finditer
语法结构:finditer(pattern, string, flags=0)
其中,pattern是匹配要求(可以填正则表达式),string是用于匹配的字符串,flags是正则表达式的匹配方式。finditer函数按照pattern对string进行匹配,从左到右,非重复依次匹配,返回一个迭代器iterator。
看到这里我们会发现它和findall函数有一点像,所以我进行了一下对比。
我们对s1匹配“is”,使用finditer函数依次寻找。
s3=re.finditer('is',s1)
print(s3)
print(type(s3))
得到的结果是:
<callable_iterator object at 0x000002B50372B0F0>
<class 'callable_iterator'>
可见,finditer函数返回的是一个迭代器,我们使用print函数不能看到其中的内容。对此,我们进行遍历,打印出来。
for s3i in s3:
print(s3i)
结果为:
<_sre.SRE_Match object; span=(2, 4), match='is'>
<_sre.SRE_Match object; span=(5, 7), match='is'>
<_sre.SRE_Match object; span=(11, 13), match='is'>
而之前我们介绍的findall函数则不同。
s4=re.findall('is',s1)
print(s4)
print(type(s4))
结果为:
['is', 'is', 'is']
<class 'list'>
可以发现,findall函数返回的是一个列表对象,可以以列表元素的形式直接显示匹配到的内容,在应用时可以根据需要进行选择。
以上就是我们对re库的进一步介绍了。至此,正则表达式的主要函数我们就介绍的差不多了,我们在使用时要注意观察待清洗文本的规律,结合正则表达式的元字符,让它为我们的工作助力。
关于我们
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
以上是关于妙用正则表达式--Python中的re模块的主要内容,如果未能解决你的问题,请参考以下文章