re.match(pattern,string,flags=0)
学习Python中有不明白推荐加入交流群
号:516107834
群里有志同道合的小伙伴,互帮互助,
群里有不错的学习教程!
re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
参数介绍:
pattern:正则表达式
string:匹配的目标字符串
flags:匹配模式
正则表达式的匹配模式:
最常规的匹配
import re
content ='hello 123456 World_This is a Regex Demo'
print(len(content))
result = re.match('^hellosd{6}sw{10}.*Demo$$',content)
print(result)
print(result.group()) #返回匹配结果
print(result.span()) #返回匹配结果的范围
结果运行如下:
<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
hello 123456 World_This is a Regex Demo
(0, 39)
泛匹配
使用(.*)匹配更多内容
import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^hello.*Demo$',content)
print(result)
print(result.group())
结果运行如下:
<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
hello 123456 World_This is a Regex Demo
匹配目标
在正则表达式中使用()将要获取的内容括起来
使用group(1)获取第一处,group(2)获取第二处,如此可以提取我们想要获取的内容
import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^hellos(d{6})s.*Demo$',content)
print(result)
print(result.group(1))#获取匹配目标
结果运行如下:
<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
123456
贪婪匹配
import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^he.*(d+).*Demo$',content)
print(result)
print(result.group(1))
注意:.*会尽可能的多匹配字符
非贪婪匹配
import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^he.*?(d+).*Demo$',content)
print(result)
print(result.group(1))
注意:.*?会尽可能匹配少的字符
使用匹配模式
在解析HTML代码时会有换行,这时我们就要使用re.S
import re
content ='hello 123456 World_This '
'is a Regex Demo'
result = re.match('^he.*?(d+).*?Demo$',content,re.S)
print(result)
print(result.group(1))
运行结果如下:
<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
123456
转义
在解析过程中遇到特殊字符,就需要做转义,比如下面的$符号。
import re
content = 'price is $5.00'
result = re.match('^price.*$5.00',content)
print(result.group())
总结:尽量使用泛匹配,使用括号得到匹配目标,尽量使用非贪婪模式,有换行就用re.S
re.search(pattern,string,flags=0)
re.search扫描整个字符串并返回第一个成功的匹配。
比如我想要提取字符串中的123456,使用match方法无法提取,只能使用search方法。
import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('d{6}',content)
print(result)
import re
content ='hello 123456 World_This is a Regex Demo'
result = re.search('d{6}',content)
print(result)
print(result.group())
运行结果如下:
<_sre.SRE_Match object; span=(6, 12), match='123456'>
123456
匹配演练
可以匹配代码里结构相同的部分,这样可以返回你需要的内容
import re
content = '2009年中信出版社出版图书'
result = re.search('(.*?)',content)
print(result.group(1))
1
2009年中信出版社出版图书
re.findall(pattern,string,flags=0)
搜索字符串,以列表形式返回全部能匹配的字串
import re
html ='''
'''
result = re.findall('(.*?)',html,re.S)
count = 0
for list in result:
print(result[count])
count+=1
网络歌曲
2009年中信出版社出版图书
re.sub( pattern,repl,string,count,flags)
re.sub共有五个参数
三个必选参数 pattern,repl,string
两个可选参数count,flags
替换字符串中每一个匹配的字符串后替换后的字符串
import re
content = 'hello 123456 World_This is a Regex Demo'
content = re.sub('d+','',content)
print(content)
运行结果如下:
hello World_This is a Regex Demo
import re
content = 'hello 123456 World_This is a Regex Demo'
content = re.sub('d+','what',content)
print(content)
运行结果如下:
hello what World_This is a Regex Demo
import re
content = 'hello 123456 World_This is a Regex Demo'
content = re.sub('(d+)',r'� 789',content)
print(content)
运行结果如下:
hello 123456 789 World_This is a Regex Demo
注意:这里�代表前面匹配的123456
Robospider
演练
在这里我们替换li标签
import re
html ='''
'''
html = re.sub('
print(html)
运行结果如下,里面就没有li标签
compile(pattern [, flags])
该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配
将正则表达式编译成正则表达式对象,以便于复用该匹配模式
import re
content = 'hello 123456 '
'World_This is a Regex Demo'
pattern = re.compile('hello.*?Demo',re.S)
result = re.match(pattern,content)
print(result.group())
运行结果如下:
hello 123456 World_This is a Regex Demo
综合使用
import re
html = '''
解除好友2:暗网
7.9
镰仓物语
6.9
特工
8.3
幸福的拉扎罗
8.6
大师兄
5.2
风语咒
6.9
精灵旅社3:疯狂假期
6.8
狄仁杰之四大天王
6.2
摩天营救
6.4
复仇者联盟3:无限战争
8.1
'''
count = 0
for list in result:
print(result[count])
count+=1
运行结果如下:
('解除好友2:暗网', '7.9')
('镰仓物语', '6.9')
('特工', '8.3')
('幸福的拉扎罗', '8.6')
('大师兄', '5.2')
('风语咒', '6.9')
('精灵旅社3:疯狂假期', '6.8')
('狄仁杰之四大天王', '6.2')
('摩天营救', '6.4')
('复仇者联盟3:无限战争', '8.1')
网友评论