1.re.match() 匹配第一個值
列表里的值可以有多個范圍,有一個符合就可以。
match只匹配第一個值,所以列表里的范圍是第一個值得取值范圍。如果第一個值被設定好且存在,那么列表的取值范圍變為第二個,match返回的值會變成第一個和第二個。
有些內容首字符是固定的,比如手機號等。match的作用就是查看文件中的一些固定的字符是否出錯或者獲得文件中首個字符(沒有指定首字符的情況下)。
import re date = "5M345bc" print(re.match("5[0-9]","345bc")) print(re.match("[a-z,A-Z,0-9]",date))
2.re.search()
search 需要在取值范圍后加上長度限定,否則和match一樣,只會取符合條件的第一個值。
search是全局搜索,符合條件就返回,match是從第一個搜索。
search返回的是一個字符串,長度為花括號里的設定。
search從全局返回的是第一個符合條件的值,那么怎么才能返回所有符合條件的值?
import re
print(re.search("[a-z]{4}","345789abdc"))
print(re.search("3[0-9]{5}","345789abdc")) #花括號里的是返回值的最大個數,不能超過總長度。
print(re.search("[a-z,A-Z,0-9]{8}","345789abcd"))
3.findall() 返回所有符合條件的值。
search只返回花括號里設定長度的值的字符串,不設定長度就只返回一個字符,和match一樣,只是search是全局。
findall 返回一個列表,里面的值可根據花括號里面的長度分離開來,成為列表中的一個一個元素。
import re print(re.match("[0-9]","345789abdc")) print(re.search("[a-z]{2}","345789abdc")) print(re.search("[a-z,A-Z,0-9]{4}","345789abcd")) print(re.findall("[a-z]{2}","345789abdc")) print(re.findall("[a-z,A-Z,0-9]{4}","345789abcd")) # <_sre.SRE_Match object; span=(0, 1), match='3'> # <_sre.SRE_Match object; span=(6, 8), match='ab'> # <_sre.SRE_Match object; span=(0, 4), match='3457'> # ['ab', 'dc'] # ['3457', '89ab']
如何拿到search里面match的值
利用group()方法,首先得判斷返回值是否是None
res1 = re.search("[a-z,A-Z,0-9]","345789abcd") if res1 : print(res1.group())