妙用正则表达式--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库的进一步介绍了。至此,正则表达式的主要函数我们就介绍的差不多了,我们在使用时要注意观察待清洗文本的规律,结合正则表达式的元字符,让它为我们的工作助力。

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



关于我们

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

以上是关于妙用正则表达式--Python中的re模块的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式 re模块基础

正则表达式和Python中的re模块

第43天python学习re模块学习

Python 正则表达式re模块

Python re模块与正则表达式详解

python基础学习(十三)