05、Python爬虫之正则表达式常用方法(超全)

05、Python爬虫之正则表达式常用方法(超全),第1张


文章目录
  • 前言
  • 一、search()函数
  • 二、match()函数
  • 三、compile()函数
  • 四、findall()函数
  • 五、sub()函数
  • 六、subn()函数
  • 七、split()函数
  • 八、补充说明
  • 总结


前言

最近忙得焦头烂额,上篇总结完正则表达式的基础后,本想在几天内把正则表达式的常用方法给补上,奈何计划赶不上变化(๑˙_˙๑)(面瘫中。。。)。废话不多说,码字开始。

应用下面方法记得导入re模块 import re

关键字:正则表达式方法


一、search()函数

re.search(pattern,string,[flags])

参数说明

  • pattern : 表示模式字符串,由要匹配的正则表达式转换而来
  • string :表示要匹配的字符串
  • flags:可选参数,表示修饰符,用于控制匹配方式,如是否区分字母大小写
功能示例
搜索第一指定字符的开头的字符串import re
pattern = ‘you_\w+’ #模式字符串

string = ‘YOU_CAN you_can’
#要匹配的字符串
#搜索字符串不区分大小写
match = re.search(pattern,string,re.I)
print(match)
#输出
string = ‘句子YOU_CAN you_can’


string = ‘句子YOU_CAN you_can’
#搜索字符串不区分大小写
match = re.search(pattern,string,re.I)
print(match)
#输出
可选匹配字符串中的内容import re
pattern = ‘(\d?)+mrsoft\s?([\u4e00-\u9fa5]?)+’
match = re.search(pattern,‘01mrsoft’)
print(match)
#返回
match = re.search(pattern,‘mrsoft’)
print(match)
#返回
match = re.search(pattern,'mrsoft ')
print(match)
#返回
match=re.search(pattern,‘mrsoft第一’)
print(match)
#返回
match = re.search(pattern,‘rsoft 第一’)
print(match)
#返回None
使用"\b"匹配字符串的边界import re
#表达式,my两侧均有边界
pattern = r’\bmy\b’
#my右侧不是边界,而是soft,匹配失败
match = re.search(pattern,‘mysoft’)
print(match) #输出None
#my左侧为边界,右侧为空格,匹配成功
match = re.search(pattern,‘my soft’)
print(match) #输出
#my左侧为空格,右侧为soft,匹配成功
match = re.search(pattern,’ mysoft ')
print(match) #输出None
#my左侧为边界,右侧为".",匹配成功
match = re.search(pattern,‘my.soft’)
print(match) #输出

PS_1: 有关于 ‘(\d?)+mrsoft\s?([\u4e00-\u9fa5]?)+’
(\d?)+表示多个数字可有可无;\s表示空格可有可无,([\u4e00-\u9fa5]?)+表示多个汉字可有可无
PS_2:pattern中出现r[xxxx]前面的r是什么意思?
r表示原生字符串,该字符串声明了引用的内容表示该内容的原始含义,避免多次转义达成的反斜杠的困扰

二、match()函数

有关于match()函数的介绍,结合search()函数来进行对比认识

match()函数search()函数
功能match()函数试图从字符串的起始部分对模式进行匹配。如果匹配成功则返回MatchObject对象实例,如果不是起始位置,则返回Nonere.search()函数则扫描整个字符串并返回第一个成功的匹配,匹配成功re.search方法则返回MatchObject对象的实例,否则返回None
示例
三、compile()函数

re.compile()函数用于编译正则表达式,生成一个正则表示式(pattern)对象,供match()和search()这两个函数使用----更多的是给findall()函数使用
示例如下:

import re

str_val = 'Hi,Welcome to China,I love python.'
mycompile = re.compile('\w*o\w*')
str_list = mycompile.findall(str_val)
print(str_list)

输出:[‘Welcome’, ‘to’, ‘love’, ‘python’]

四、findall()函数

re.findall(pattern,string,[flags])

参数说明

  • pattern:表示模式字符串,由要匹配的正则表达式转换而来。
  • string: 表示要匹配的字符串。
  • flags:可选参数,表示修饰符,用于控制匹配方式,如是否区分字母大小写
功能示例
匹配所有以指定字符串开头的字符串import re
pattern = ‘you_\w+’ #模式字符串
string = ‘YOU_CAN you_can’ #要匹配的字符串
#不区分大小写搜索,返回[‘YOU_CAN’, ‘you_can’]
match = re.findall(pattern,string,re.I)
print(match)
string = ‘句子YOU_CAN you_can’
#区分大小写的方式搜索,返回[‘you_can’]
match = re.findall(pattern,string)
print(match)`
使用".*"实现贪婪匹配字符串pattern=‘http://.*/’
#表达式,使用".*"获取www.baidu123.com
match=re.findall(pattern,‘https://www.baidu123.com/’
#返回[‘https://www.baidu123.com/’]
单独获取" .* "所匹配的中间内容pattern=‘http://(.*)/’
#表达式,使用".*"获取www.baidu123.com
match=re.findall(pattern,‘https://www.baidu123.com/’
#返回[‘www.baidu123.com/’]
使用“ .*? "实现非贪婪匹配字符串pattern=‘http://.*?(\d+).com/’
#表达式,使用".*?"获取www.baidu123.com
match=re.findall(pattern,‘https://www.baidu123.com/’
#返回[‘123’]
五、sub()函数

re.sub(pattern,repel,string,count,flags)

参数说明

  • pattern:表示要替换的模式字符串,由要匹配的正则表达式转换而来
  • string:表示要被查找替换的原始字符串
  • count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。
  • flags:可选参数,表示修辞符,用于控制匹配方式,如是否区分字母大小写
功能示例
替换字符串import re
pattern=r’1[3457]\d{9}'
#定义要匹配的字符串
string = ‘你好,联系电话为138222222223’
#返回你好,联系电话为1XXXXXXXXXXX
result = re.sub(pattern,‘1XXXXXXXXXXX’,string)
print(result)
删除字符串中的所有字母import re
string = ‘abcd10efg0hiji8lmn6opq’
#需要匹配的字符串
pattern = “[a-z]” #表达式
#匹配字符串,所有字母替换为空,并忽略大小写
match = re.sub(pattern,‘’,string,flags=re.I)
print(match)
输出10086
六、subn()函数
功能示例
替换字符串并返回替换数量string = “Nice to meet you, John. Nice to meet you,too,Mary.John,what a great weather!”
pattern = “John” #表达式
match = re.subn(pattern,“Mackle”,string)
#匹配字符串,将所有的John替换为Mackle,并统计替换次数
print(match)
#输出 (‘Nice to meet you, Mackle. Nice to meet you,too,Mary.Mackle,what a great weather!’ ,2)
print(match[1]) #输出2
七、split()函数

re.split(pattern, string, [maxsplit], [flag])

参数说明

  • pattern : 表示模式字符串,由要匹配的正则表达式转换而来
  • string :表示要匹配的字符串
  • maxsplit : 可选参数,表示最大的拆分次数。
  • flags:可选参数,表示修饰符,用于控制匹配方式,如是否区分字母大小写
功能示例
分割字符串pattern = r’[?|&] #定义分割字符
url=“https://weibo.com/newlogin?tabtype=weibo&gid=10280356”
result = re.split(pattern,url) #返回[‘https://weibo.com/newlogin’,‘tabtype=weibo’,‘gid=10280356’]
设置最大分割次数string=“Python|爬虫|之|正则|表达式”
pattern=‘\|’ #表达式
match = re.split(pattern,string,maxsplit=1)
#通过第一次出现的 | 进行分割。返回['Python|‘,’爬虫|'之|正则|表达式‘ ]
八、补充说明

现在开始对上面遗漏的知识点进行填坑,在参数设置中,有一个flags参数

flags:可选参数,表示修饰符,用于控制匹配方式

修饰符描述
re.I(IGNORECASE)使匹配忽略大小写
re.L(LOCAL)做本地化识别匹配,影响"w,"W,"b,和"B
re.M(MULTILINE)多行匹配,影响 ^ 和 $。使用此标志后,^和$ 匹配行首和行尾时,会增加换行符之前和之后的位置
re.S(DOTALL)使匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X(VERBOSE)当指定该标志时,空白符会被忽略,除非其在字符类中或者反斜杠后。它可以允许你将注释写入RE,这些注释会被忽略。该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

总结

本文详细的介绍了学习Python爬虫时,re模块可能用到的一些函数方法。有关于Python正则表达式的完整内容学习,可结合上一篇文章04、Python爬虫之正则表达式基础(超全) 一起学习,以便理解pattern的编写。
如有错误的地方,恳请指正,不胜感谢,下篇再会。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799495.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存