前言
re.findall()
,re.search()
和re.match()
是Python正则表达式中常用的方法,re.search()
和re.match()
类似,此次主要介绍re.findall()
和re.search()
。
re.match()
尝试从字符串的起始位置匹配一个模式,匹配成功方法返回一个匹配的对象,否则返回None。
re.search()
扫描整个字符串并返回第一个成功的匹配,匹配成功方法返回一个匹配的对象,否则返回None。
re.findall()
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次, findall 匹配所有。
实例:
import re,json
dd = {
"data": {
"XB-afea46d26a0f0b2d016a0f516710007c": [
"17"
]
},
"url":"<html><h1>what the fuck!</h1></html>",
"time":"243dsfaefa2019-04-03 18:12:45dafjk3k345345kadasjfk",
"phone":"2004-959-559"
}
st = json.dumps(dd)
pattern1 = r'-[0-9]+'
print(re.search(pattern1,st).group())
print(re.findall(pattern1,st))
输出结果
-04
['-04', '-03', '-959', '-559']
正则表达式带有一个捕获组
findall返回该捕获组内正则表达式所匹配的字符的列表,search则会匹配整个正则表达式并返回第一个
实例
import re,json
dd = {
"data": {
"XB-afea46d26a0f0b2d016a0f516710007c": [
"17"
]
},
"url":"<html><h1>what the fuck!</h1></html>",
"time":"243dsfaefa2019-04-03 18:12:45dafjk3k345345kadasjfk",
"phone":"2004-959-559"
}
st = json.dumps(dd)
pattern2 = r'-(\d+)'
print(re.search(pattern2,st))
print(re.search(pattern2,st).group(0))
print(re.search(pattern2,st).group(1))
print(re.findall(pattern2,st))
输出
<re.Match object; span=(128, 131), match='-04'>
-04
04
['04', '03', '959', '559']
正则表达式带有多个个捕获组
findall返回多个捕获组内正则表达式所匹配的字符的元组的列表,search则会匹配整个正则表达式并返回第一个
实例
import re,json
dd = {
"data": {
"XB-afea46d26a0f0b2d016a0f516710007c": [
"17"
]
},
"url":"<html><h1>what the fuck!</h1></html>",
"time":"243dsfaefa2019-04-03 18:12:45dafjk3k345345kadasjfk",
"phone":"2004-959-559"
}
st = json.dumps(dd)
pattern3 = r'(?P<year>\d{4})-([0-9]{2})-(\d\d)'
print(re.search(pattern3,st))
print(re.search(pattern3,st).group(0))
print(re.search(pattern3,st).group('year'))
print(re.search(pattern3,st).group(2))
print(re.search(pattern3,st).group(3))
print(re.findall(pattern3,st))
结果
<re.Match object; span=(124, 134), match='2019-04-03'>
2019-04-03
2019
04
03
[('2019', '04', '03')]
网友评论