re匹配语法-match、search和findall
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())
越是困难的事越要立即去做,这样收益才会最大!!!