Python爬虫正则表达式常用符号和方法
正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。
1、常用符号
.:匹配任意字符,换行符\n除外
:匹配前一个字符0次或无限次
?:匹配前一个字符0次或1次
.*:贪心算法,尽可能的匹配多的字符
.*?:非贪心算法
():括号内的数据作为结果返回
2、常用方法
findall:匹配所有符合规律的内容,返回包含结果的列表
Search:匹配并提取第一个符合规律的内容,返回一个正则表达式对象
Sub:替换符合规律的内容,返回替换后的值
3、使用示例
(1).的使用举例,匹配任意字符,换行符\n除外
importre#导入re库文件
a='xy123'
b=re.findall('x..',a)
printb
打印的结果为:['xy1'],每个.表示一个占位符
(2)*的使用举例,匹配前一个字符0次或无限次
a='xyxy123'
b=re.findall('x*',a)
printb
打印的结果为:['x','','x','','','','','']
(3)?的使用举例,匹配前一个字符0次或1次
a='xy123'
b=re.findall('x?',a)
printb
打印的结果为:['x','','','','','']
(4).*的使用举例
secret_code='hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
b=re.findall('xx.*xx',secret_code)
printb
打印的结果为:['xxIxxfasdjifja134xxlovexx23345sdfxxyouxx']
(5).*?的使用举例
secret_code='hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
c=re.findall('xx.*?xx',secret_code)
printc
打印的结果为:['xxIxx','xxlovexx','xxyouxx']
(6)()的使用举例
secret_code='hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
d=re.findall('xx(.*?)xx',secret_code)
printd
打印的结果为:['I','love','you'],括号内的数据作为返回的结果
(7)re.S的使用举例
s='''sdfxxhello
xxfsdfxxworldxxasdf'''
d=re.findall('xx(.*?)xx',s,re.S)
printd
打印的结果为:['hello\n','world'],re.S的作用是使.在匹配时包括\n
(8)findall的使用举例
s2='asdfxxIxx123xxlovexxdfd'
f2=re.findall('xx(.?)xx123xx(.?)xx',s2)
printf20
打印的结果为:love
这时f2为含有一个元组的列表,该元组包含两个元素,该元组中的两个元素为两个()匹配到的内容,如果s2包含多个'xx(.?)xx123xx(.?)xx'这样的子串,则f2包含多个元组;
(9)search的使用举例
s2='asdfxxIxx123xxlovexxdfd'
f=re.search('xx(.?)xx123xx(.?)xx',s2).group(2)
printf
打印的结果为:love
.group(2)表示返回第二个括号匹配到的内容,如果是.group(1),则打印的就是:I
(10)sub的使用举例
s='123rrrrr123'
output=re.sub('123(.*?)123','123%d123'%789,s)
printoutput
打印的结果为:123789123
其中的%d类似于C语言中的%d,如果output=re.sub('123(.*?)123','123789123',s),输出结果也为:123789123
(11)\d的使用举例,用于匹配数字
a='asdfasf1234567fasd555fas'
b=re.findall('(\d+)',a)
printb
打印的结果为:['1234567','555'],\d+可以匹配数字字符串;
以上就是python爬虫正则表达式的一些常用符号和语法,希望对python初学者学习有所帮助。