import?re
#pip?包管理模塊
'''
1:re.match函數(shù)
原型:match(pattern,?string,?flags=0)
參數(shù):pattern:匹配的正則表達(dá)式,string:要匹配的字符串,flages:標(biāo)志位,用于控制正則表達(dá)式的匹配方式
????????flags的值如下:
????????(常)re.I(忽略大小寫)?
????????re.L(做本地化識(shí)別)
????????(常)re.M(多行匹配,影響^和$)
????????(常)re.S(時(shí).匹配包括換行符在內(nèi)的所有字符)
????????re.U(根據(jù)Unicode字符集字符,影響\w,\W,\b,\B)
????????re.X(使我們以更靈活的格式理解正則表達(dá)式))
功能:嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置(從字符串0索引開始)匹配成功的話,返回None
????????即:匹配的模式必須在字符串的開頭
#www.baidu.com
#掃描整個(gè)字符串,返回從起始位置成功的匹配
print(re.match('www','www.baidu.com'))#能找到,返回一個(gè)對(duì)象,和www在的索引
print(re.match('www','ww.baidu.com'))#不能找到返回None
print(re.match('www','baidu.wwwcom'))#不能找到返回None
'''
'''
2:re.search函數(shù)
原型:search(pattern,?string,?flags=0)
參數(shù):pattern:匹配的正則表達(dá)式,string:要匹配的字符串,flages:標(biāo)志位,用于控制正則表達(dá)式的匹配方式
????????flags的值如下:
????????(常)re.I(忽略大小寫)?
????????re.L(做本地化識(shí)別)
????????(常)re.M(多行匹配,影響^和$)
????????(常)re.S(時(shí).匹配包括換行符在內(nèi)的所有字符)
????????re.U(根據(jù)Unicode字符集字符,影響\w,\W,\b,\B)
????????re.X(使我們以更靈活的格式理解正則表達(dá)式))
功能:掃描整個(gè)字符串,并返回第一個(gè)成功的匹配
print(re.search('www','baidu.wwwcom'))##能找到,返回一個(gè)對(duì)象,和www在的索引
'''
'''
re.findall函數(shù)
原型:findall(pattern,?string,?flags=0)
參數(shù):pattern:匹配的正則表達(dá)式,string:要匹配的字符串,flages:標(biāo)志位,用于控制正則表達(dá)式的匹配方式
????????flags的值如下:
????????(常)re.I(忽略大小寫)?
????????re.L(做本地化識(shí)別)
????????(常)re.M(多行匹配,影響^和$)
????????(常)re.S(時(shí).匹配包括換行符在內(nèi)的所有字符)
????????re.U(根據(jù)Unicode字符集字符,影響\w,\W,\b,\B)
????????re.X(使我們以更靈活的格式理解正則表達(dá)式))
功能:掃描整個(gè)字符串,并返回結(jié)果列表(可以匹配多個(gè)數(shù)據(jù))
print(re.findall('www','www.baidu.www.com'))
'''
import?re
re.subn
'''
'''
'''
1:字符串切割
str1='sunck?is?a?good?man'
print(str1.strip('?'))
print(re.split(r'?+',str1))
2:字符串的替換和修改
re.sub()
re.sunb()
'''
'''
'''
'''
1:re.finditer函數(shù)
原型:finditer(pattern,?string,?flags=0)
參數(shù):pattern:匹配的正則表達(dá)式,string:要匹配的字符串,flages:標(biāo)志位,用于控制正則表達(dá)式的匹配方式
????????flags的值如下:
????????(常)re.I(忽略大小寫)?
????????re.L(做本地化識(shí)別)
????????(常)re.M(多行匹配,影響^和$)
????????(常)re.S(時(shí).匹配包括換行符在內(nèi)的所有字符)
????????re.U(根據(jù)Unicode字符集字符,影響\w,\W,\b,\B)
????????re.X(使我們以更靈活的格式理解正則表達(dá)式))
:
功能:于findall類似,掃描整個(gè)字符串,返回的是一個(gè)迭代器
2:re.sub函數(shù)和re.subn函數(shù)
原型:sub(pattern,?repl,?string,?count=0,?flags=0)
????:subn(pattern,?repl,?string,?count=0,?flags=0)
參數(shù):pattern:匹配的正則表達(dá)式,repl:指定的要替換的字符串,string:目標(biāo)字符串,count:最大替換次數(shù),flages:標(biāo)志位,用于控制正則表達(dá)式的匹配方式
????????flags的值如下:
????????(常)re.I(忽略大小寫)?
????????re.L(做本地化識(shí)別)
????????(常)re.M(多行匹配,影響^和$)
????????(常)re.S(時(shí).匹配包括換行符在內(nèi)的所有字符)
????????re.U(根據(jù)Unicode字符集字符,影響\w,\W,\b,\B)
????????re.X(使我們以更靈活的格式理解正則表達(dá)式))
功能:在目標(biāo)字符串中以正則表達(dá)式的規(guī)則匹配字符串,在把他們替換成指定字符串,可以指定替換次數(shù),如果不指定,就會(huì)替換匹配到的所有的字符串
????區(qū)別:sub返回一個(gè)被替換的字符串
?????????subn返回一個(gè)元組,第一個(gè)元素是被替換的字符串,第二個(gè)元素表示被替換的次數(shù)
分組:
概念:除了簡(jiǎn)單的判斷是否匹配之外
????正則表達(dá)式還有提前子串的功能,用()表示的就是提取分組
????str='010-53247654'
????m=re.match(r'(?P<first>\d{3})-(\d{8})',str)
????#使用序號(hào)獲取對(duì)應(yīng)組的信息,group(0)一直代表的原始字符串
????#?P<first>寫在組中給組起名
????print(m.group(0))
????print(m.group(1))
????print(m.group(2))
????#查看匹配的各組情況
????print(m.groups())
編譯:
概念:當(dāng)我們使用正則表達(dá)式時(shí),re模塊會(huì)干兩件事
????1:編譯正則表達(dá)式,如果正則表達(dá)式本身不合法,會(huì)報(bào)錯(cuò)
????2:用編譯后的正則表達(dá)式去匹配對(duì)象
編譯函數(shù):
????re.compile函數(shù)
????原型:compile(pattern,?flags=0)
????參數(shù):pattern:要編譯的正則表達(dá)式
????????flages:標(biāo)志位,用于控制正則表達(dá)式的匹配方式
????????flags的值如下:
????????(常)re.I(忽略大小寫)?
????????re.L(做本地化識(shí)別)
????????(常)re.M(多行匹配,影響^和$)
????????(常)re.S(時(shí).匹配包括換行符在內(nèi)的所有字符)
????????re.U(根據(jù)Unicode字符集字符,影響\w,\W,\b,\B)
????????re.X(使我們以更靈活的格式理解正則表達(dá)式))
????功能:
????#編譯成正則對(duì)象,編譯完后都可以通過編譯對(duì)象(re對(duì)象)來調(diào)用match,search等re函數(shù)
????pat=r'^1(([3578]\d)|(47)\d{8}$'
????re_telephone=re.compile(pat)
????#編譯完后的運(yùn)用,相當(dāng)于調(diào)用re函數(shù)時(shí)少了正則表達(dá)式的輸入
????re_telephone.match(str)
'''
re.compile()