当前位置: 首页 > 后端技术 > Python

履带系列-5、爬虫中正则表达式的用法详解

时间:2023-03-26 15:57:16 Python

通过requests库,我们可以很方便的获取网页的源代码。但是如果我们想要更精细地提取我们想要的内容,我们就需要对内容进行分析。这时候,我们可以使用一个非常强大的工具来帮助我们——正则表达式正则表达式:通过指定一些特殊字符或字符组合来过滤字符串,提取或检索目标内容。正则匹配规则如下图所示,来源:CSDN在Python中,re模块具有正则表达式的所有功能。下面介绍Re中常用的几种方法。1、re.match从字符串的起始位置开始匹配。如果起始位置匹配成功,则返回对应的字符。如果不是起始位置,则返回None。语法如下:defmatch(pattern,string,flags=0):pattern:匹配的正则表达式string:匹配的字符串flags:用于控制正则匹配方式(如下表)修饰符说明re。I使匹配不区分大小写re.L执行区域感知匹配re.M多行匹配,影响^和$re.Smakes。matchallcharactersincludingnewlinesre.U根据Unicode字符集解析字符。此标志影响w、W、b、B.re.X此标志允许您通过提供更灵活的格式来编写更容易理解的正则表达式。匹配后会返回一个对象,可以通过group(num)或groups()获取对应的字符串importretext='HelloWorld,HiPython'#matchHellom1=re.match('Hello',text)#matchHim2=re.match('Hi',text)ifm1:print(m1.group())else:print('你好字符匹配失败')ifm2:print(m2.group())else:print('Hi字符匹配失败')执行结果:因为Hello字符串在文本中的起始位置,所以匹配成功,但是Hi字符不在起始位置,所以返回NoneHelloHi字符匹配失败中正则表达式,用()表示要提取内容。undefined如果匹配失败,返回一个空列表,匹配/搜索只匹配一次语法deffindall(pattern,string,flags=0):importretext='Hello123Python678'#匹配字符串中的所有数字result=re.findall(r'\d+',text)print(result)#['123','678']四、re.finditer和findall类似,唯一不同的是它返回一个迭代器,而findall返回一个列表语法deffinditer(pattern,string,flags=0)importretext='Hello123Python678'#匹配字符串中的所有数字result=re.finditer(r'\d+',text)print(result)#foriinresult:print(i.group())outputs1236785.re.compile函数用于编译正则表达式并生成Patter对象供match()和search()函数使用。语法defcompile(pattern,flags=0):pattern:字符串形式的正则表达式flags:可选,表示匹配模式,如忽略大小写,多行模式等。具体参数有:re。我忽略大小写re.L代表特殊字符集w,W,b,B,s,S取决于当前环境re.M多行模式re.S是.andanycharacterincludingnewline(.不包括换行符)re.U表示特殊字符集w,W,b,B,d,D,s,S依赖Unicode字符属性库re.X增加可读性,忽略#pattern.search/match/findall(string,pos:int,endpos:int=...)之后的空格和注释string:等待匹配的字符串pos:可选参数,指定字符串的起始位置,默认为0endpos:可选参数,指定字符串结束的位置,默认为字符串长度如下importretext='Hello123Python678'pattern=re.compile(r'\d+')f1=pattern.findall(text)#从下标6开始匹配f2=pattern.findall(text,6)#匹配到下标8停止f3=pattern.findall(text,endpos=8)print(f1)#['123','678']print(f2)#['23','678']print(f3)#['12']