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



前言

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

应用下面方法记得导入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)
#输出<re.Match object; span=(0, 7), match=‘YOU_CAN’>
string = ‘句子YOU_CAN you_can’


string = ‘句子YOU_CAN you_can’
#搜索字符串不区分大小写
match = re.search(pattern,string,re.I)
print(match)
#输出<re.Match object; span=(2, 9), match=‘YOU_CAN’>
可选匹配字符串中的内容import re
pattern = ‘(\d?)+mrsoft\s?([\u4e00-\u9fa5]?)+’
match = re.search(pattern,‘01mrsoft’)
print(match)
#返回<re.Match object; span=(0, 8), match=‘01mrsoft’>
match = re.search(pattern,‘mrsoft’)
print(match)
#返回<re.Match object; span=(0, 6), match=‘mrsoft’>
match = re.search(pattern,'mrsoft ')
print(match)
#返回<re.Match object; span=(0, 7), match='mrsoft '>
match=re.search(pattern,‘mrsoft第一’)
print(match)
#返回<re.Match object; span=(0, 9), match=‘mrsoft 第一’>
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) #输出<re.Match object; span=(0, 2), match=‘my’>
#my左侧为空格,右侧为soft,匹配成功
match = re.search(pattern,’ mysoft ')
print(match) #输出None
#my左侧为边界,右侧为".",匹配成功
match = re.search(pattern,‘my.soft’)
print(match) #输出<re.Match object; span=(0, 2), match=‘my’>

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的编写。
如有错误的地方,恳请指正,不胜感谢,下篇再会。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python 爬虫中,正则表达式是非常常用的技术,可以帮助我们从网页中提取出需要的信息。下面是一些常用正则表达式符号和方法: 1. ".":匹配任意单个字符,除了换行符。 2. "^":匹配字符串的开始位置。 3. "$":匹配字符串的结束位置。 4. "*":匹配前一个字符出现 0 次或多次。 5. "+":匹配前一个字符出现 1 次或多次。 6. "?":匹配前一个字符出现 0 次或 1 次。 7. "{m}":匹配前一个字符出现 m 次。 8. "{m,n}":匹配前一个字符出现 m 到 n 次。 9. "(...)":分组匹配,匹配括号内的表达式。 10. "[...]":匹配括号内的任意一个字符。 11. "[^...]":匹配不在括号内的任意一个字符。 12. "\d":匹配数字,等同于 [0-9]。 13. "\D":匹配非数字,等同于 [^0-9]。 14. "\s":匹配空白字符,包括空格、制表符、换行符等。 15. "\S":匹配非空白字符。 16. "\w":匹配单词字符,包括字母、数字、下划线。 17. "\W":匹配非单词字符。 在 Python 中,使用 re 模块进行正则表达式的匹配。常用方法包括: 1. re.compile(pattern):将正则表达式编译成一个对象,提高匹配效率。 2. re.search(pattern, string):在字符串中搜索匹配正则表达式的第一个位置。 3. re.findall(pattern, string):在字符串中搜索匹配正则表达式的所有位置,并返回一个列表。 4. re.sub(pattern, repl, string):将字符串中所有匹配正则表达式的字符替换为指定的字符串。 以上是一些常用正则表达式符号和方法,希望能对你有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值