re.match函數(shù)只匹配字符串的開始字符列敲,如果開始的字符不符合正則表達(dá)式芭概,匹配就會(huì)失敗妇蛀,返回None鲜屏。
re.search方法匹配整個(gè)字符串,直到找到一個(gè)匹配的對象士葫,匹配結(jié)束沒找到匹配值才返回None狸页。
#! /usr/bin/evn python
#-*- coding:utf-8 -*-
import re
line='Cats are smarter than dogs'
matchObj=re.match(r'dogs',line,re.M|re.I)
if matchObj:
print('use match,the match string is:',matchObj.group())
else:
print('No match string!!')
matchObj=re.search(r'dogs',line,re.M|re.I)
if matchObj:
print('use search,the match string is:',matchObj.group())
else:
print('No search match string!!')
執(zhí)行結(jié)果如下:
No match string!!
use search,the match string is: dogs
該示例中使用了match類中的分組方法——group路捧。
該方法定義如下:
def group(self,*args):
"""Return one or more subgroups of the match.
:type:T|tuple
"""
pass
groups([group],···]):獲得或多個(gè)分組截獲的字符串撒顿,指定多個(gè)參數(shù)時(shí)丑罪,以元祖形式返回。group1可以使用編號(hào)核蘸,也可以使用別名巍糯。編號(hào)0代表整個(gè)匹配的子串啸驯。不填寫參數(shù)時(shí)返回group(0);沒有截獲字符串時(shí)返回None客扎;截獲多次字符串的組時(shí),返回最后一次截獲的子串罚斗。
還有一個(gè)常用的分組方法groups徙鱼。
groups([default]):以元組形式返回全部分組截獲的字符串,相當(dāng)于調(diào)用group(1,2,···;last)。
default表示沒有截獲字符串時(shí)以這個(gè)值代替袱吆,默認(rèn)為None厌衙。
編譯
當(dāng)我們在Python中使用正則表達(dá)式時(shí),re模塊內(nèi)部會(huì)做兩件事情:
(1)編譯正則表達(dá)式绞绒,如果正則表達(dá)式的字符串本身不合法婶希,就會(huì)報(bào)錯(cuò)
(2)用編譯后的正則表達(dá)式匹配字符串
如果一個(gè)正則表達(dá)式需要重復(fù)使用幾千次,處于效率考慮蓬衡,我們可以預(yù)編譯該正則表達(dá)式喻杈,這樣重復(fù)使用時(shí)就不需要便宜這個(gè)步驟了,直接匹配即可:
#狰晚! /usr/bin/python3
#-*- coding:utf-8 -*-
re_telephone=re.compile(r'^(\d{3})-(\d{3,8})$')
print(re_telephone.match('010-12345').groups())
print(re_telephone.match('010-8086').groups())
執(zhí)行結(jié)果:
('010','12345')
('010','8086')