前言
re.findall(),re.search()和re.match()是Python正則表達(dá)式中常用的方法,re.search()和re.match()類似,此次主要介紹re.findall()和re.search()。
re.match() 嘗試從字符串的起始位置匹配一個(gè)模式,匹配成功方法返回一個(gè)匹配的對(duì)象,否則返回None。
re.search() 掃描整個(gè)字符串并返回第一個(gè)成功的匹配,匹配成功方法返回一個(gè)匹配的對(duì)象,否則返回None。
re.findall()在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次, findall 匹配所有。
實(shí)例:
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))
輸出結(jié)果
-04
['-04', '-03', '-959', '-559']
正則表達(dá)式帶有一個(gè)捕獲組
findall返回該捕獲組內(nèi)正則表達(dá)式所匹配的字符的列表,search則會(huì)匹配整個(gè)正則表達(dá)式并返回第一個(gè)
實(shí)例
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']
正則表達(dá)式帶有多個(gè)個(gè)捕獲組
findall返回多個(gè)捕獲組內(nèi)正則表達(dá)式所匹配的字符的元組的列表,search則會(huì)匹配整個(gè)正則表達(dá)式并返回第一個(gè)
實(shí)例
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))
結(jié)果
<re.Match object; span=(124, 134), match='2019-04-03'>
2019-04-03
2019
04
03
[('2019', '04', '03')]