目錄
1、 正則表達(dá)式基本使用谅辣,元字符修赞,預(yù)定義字符
2、 python的正則表達(dá)式re模塊
為了方便講解桑阶,首先講一下re模塊最簡(jiǎn)單的用法
import re #內(nèi)置模塊
#編譯柏副,就是我們要匹配的規(guī)則,這里之所以要編譯一下蚣录,是因?yàn)閜ython內(nèi)部的優(yōu)化割择,如果后面多次使用這個(gè)規(guī)則,效率則會(huì)提升
pattern = re.compile('sun')
#match方法:從頭匹配
#str = "sun111"
str = "111sun"
match = pattern.match(str)
#這里也就是說(shuō)這里
#當(dāng)str是sun111時(shí)萎河,控制臺(tái)就輸出sun荔泳,表示匹配成功
#當(dāng)str是111sun時(shí),控制臺(tái)就輸出None,表示匹配失敗
if match:
print(match.group())
else:
print(match)
一公壤、 正則表達(dá)式基本使用换可,元字符椎椰,預(yù)定義字符
1.1厦幅、元字符
元字符 | 含義 | 用法 |
---|---|---|
點(diǎn)號(hào): . | 可以匹配任意字符(\n除外) |
re.match('sun.', 'sunA') #匹配成功 re.match('sun.', 'sun@') #匹配成功 re.match('sun.', 'sun5') #匹配成功 re.match('sun.', 'sun\n') #匹配失敗 |
星號(hào): * | 可以匹配某字符0次、1次慨飘、n次 |
print(re.findall("qwer*", 'qwe'))#匹配r 0 次成功 print(re.findall("qwer*", 'qwer'))#匹配r 1 次成功 print(re.findall("qwer*", 'qwerrrrr'))#匹配r n 次成功 |
加號(hào): + | 可以匹配某字符1次确憨、n次 |
print(re.findall("qwer+", 'qwe'))#匹配r 0 次失敗功 print(re.findall("qwer+", 'qwer'))#匹配r 1 次成功 print(re.findall("qwer+", 'qwerrrrr'))#匹配r n 次成功 |
問(wèn)號(hào):译荞? | 某字符要么沒(méi)有(0次),要么只有1次 |
print(re.findall("sun?w", 'fsunw'))#匹配成功 print(re.findall("sun?w", 'fsuw'))#匹配成功 print(re.findall("sun?w", 'fsunnw')) #匹配失敗 |
上括號(hào): ^ | 匹配開(kāi)頭 |
re.findall("^sun", 'sun11111'))#匹配成功(sun) re.findall("^sun", '11sun111') #匹配失敗 |
美元符: $ | 匹配結(jié)尾 |
re.findall("sun$", '11111sun')#匹配成功(sun) re.findall("sun$", 'sun11111') #匹配失敗 |
或符號(hào): | | 或者條件 |
re.findall("sun|qi", 'sun11')#匹配成功 re.findall("sun|qi", '11qi')#匹配成功 re.findall("sun|qi", 'sun11qi')#匹配成功 re.findall("sun|qi", 'aaaaa') #匹配失敗 |
花括號(hào): {} | {3}:匹配前一個(gè)字符3次 {1休弃,3}:匹配前一個(gè)字符1到3次 {3吞歼,}:匹配前一個(gè)字符3次以上 |
re.findall("a{1}b{2}c{3}", 'abbccc')#匹配成功 print(re.findall("a{4,}", 'aaa')#匹配失敗 re.findall("a{4,}", 'aaaa')#匹配成功 |
中括號(hào): [] | 字符集 [abc]{2}:只要字符滿(mǎn)足在中括號(hào)中存在,就保留塔猾,匹配兩次 |
匹配:re.findall("[abc]{2}", 'abebccc') 結(jié)果:['ab', 'bc', 'cc'] 分析:首先匹配a,在字符集[]中篙骡,保留, 再匹配一次丈甸,開(kāi)始匹配b,滿(mǎn)足條件糯俗, 這時(shí)得到第一個(gè)結(jié)果ab。 然后開(kāi)始匹配e,不滿(mǎn)足條件睦擂, 開(kāi)始匹配b....以此類(lèi)推 |
小括號(hào): () | 分組 |
匹配:re.match("(sun){1}([abc]{2})", 'sunaaa').groups() 結(jié)果:('sun', 'aa') |
1.2得湘、預(yù)定義字符
預(yù)定義字符 | 含義 |
---|---|
\d |
0-9 |
\D |
非數(shù)字 |
\s |
匹配任意空白字符 空白字符包括空格、\n顿仇、\t淘正、\v、\f臼闻、\r |
\S |
非空白字符 |
\w |
[ a-z, A-Z, 0-9,_ ] |
\W |
與\w相反的字符鸿吆,比如#@之類(lèi)的,不包括漢字 |
\A |
匹配開(kāi)頭述呐,與 ^ 相似 |
\Z |
匹配結(jié)尾伞剑,與 $ 相似 |
\b |
邊界字符 |
\B |
非邊界字符 |
二、python的正則表達(dá)式re模塊
2.1市埋、match方法
一個(gè)參數(shù)
就是從頭開(kāi)始匹配
pattern = re.compile('sun')
result = pattern.match('sunqiyong')
if result:
print(result.group())
#輸出結(jié)果:sun
compile 第二個(gè)參數(shù)
可以改變匹配規(guī)則
pattern = re.compile('sun.')
result = pattern.match('sun\n')
if result:
print(result.group())
#沒(méi)有輸出結(jié)果
pattern = re.compile('sun.',re.S)
result = pattern.match('sun\n')
if result:
print(result.group())
#輸出結(jié)果:sun
#總結(jié)黎泣,就是加入?yún)?shù)re.S,就可以讓點(diǎn)號(hào)不受\n的影響
2.2缤谎、search 方法
相比較于match函數(shù)抒倚,都是從開(kāi)頭開(kāi)始匹配,是不過(guò)search方法是如果開(kāi)頭匹配不上坷澡,會(huì)繼續(xù)向后匹配
p = re.compile('cici')
match = p.search('123cicijjfcicioi')
if match:
print(match.group()) #輸出結(jié)果:cici
print(match.start()) #輸出結(jié)果:3 角標(biāo)3
print(match.end()) #輸出結(jié)果:7 角標(biāo)7
print(match.span()) #輸出結(jié)果:(3, 7) 匹配結(jié)果角標(biāo)區(qū)間托呕,包左不包右
2.3、分組 信息
p = re.compile('([a-z]{3})([a-z]{2})([0-9]{2})([A-Z]{2})')
match = p.search('sunci55PY')
if match:
print(match.groups()) #輸出結(jié)果('sun', 'ci', '55', 'PY')
2.4频敛、findall方法
p = re.compile('\d{2}')
match = p.findall('sunci55PY23')
print(match)#輸出結(jié)果 ['55', '23']
2.5项郊、finditer方法
和findal比較相似,匹配之后返回的對(duì)象是--->迭代器
p = re.compile('\d{2}')
match = p.finditer('benci55PY23')
for item in match:
print(item.group())
#輸出結(jié)果 55 23
2.6斟赚、sub方法 主要是替換的功能
p = re.compile('\d+')
#參數(shù)一 新的內(nèi)容着降,要替換成的內(nèi)容
#參數(shù)二 舊的內(nèi)容,要被替換的內(nèi)容
#參數(shù)三 替換的次數(shù)
match = p.sub('www','aaa5555aa33aa222aaa',2)
print(match)#輸出結(jié)果 aaawwwaawwwaa222aaa
2.7拗军、subn方法 主要是替換的功能
str = 'aaa5555aa33aa222aaa'
#參數(shù)一 匹配規(guī)則
#參數(shù)二 新的內(nèi)容任洞,要替換成的內(nèi)容
#參數(shù)三 舊的內(nèi)容蓄喇,要被替換的內(nèi)容
match = re.subn('\d+', 'qq', str)
print(match)# 輸出結(jié)果 ('aaaqqaaqqaaqqaaa', 3)
2.8、aplit方法 字符串切割
pattern = re.compile(':')#用 : 切割字符串
result = pattern.split('2017:12:12 09:21:45')
print(result)#輸出結(jié)果 ['2017', '12', '12 09', '21', '45']
print(re.split('\W','sqy android 2018'))
#輸出結(jié)果 ['sqy', 'android', '2018']
版權(quán)聲明:個(gè)人原創(chuàng)交掏,若轉(zhuǎn)載妆偏,請(qǐng)注明出處