文章目录

  • 前言
  • 一、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)

#输出<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对象实例,如果不是起始位置,则返回None

re.search()函数则扫描整个字符串并返回第一个成功的匹配,匹配成功re.search方法则返回MatchObject对象的实例,否则返回None

示例

python正则表达式爬行 爬虫正则表达式语法_爬虫

python正则表达式爬行 爬虫正则表达式语法_字符串_02

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