Python之正則表達(dá)式

目錄

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)注明出處
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盅弛,隨后出現(xiàn)的幾起案子钱骂,更是在濱河造成了極大的恐慌,老刑警劉巖挪鹏,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐柳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡狰住,警方通過(guò)查閱死者的電腦和手機(jī)张吉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)催植,“玉大人肮蛹,你說(shuō)我怎么就攤上這事〈茨希” “怎么了伦忠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)稿辙。 經(jīng)常有香客問(wèn)我昆码,道長(zhǎng),這世上最難降的妖魔是什么邻储? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任赋咽,我火速辦了婚禮,結(jié)果婚禮上吨娜,老公的妹妹穿的比我還像新娘脓匿。我一直安慰自己,他們只是感情好宦赠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布陪毡。 她就那樣靜靜地躺著,像睡著了一般勾扭。 火紅的嫁衣襯著肌膚如雪毡琉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,245評(píng)論 1 299
  • 那天妙色,我揣著相機(jī)與錄音桅滋,去河邊找鬼。 笑死燎斩,一個(gè)胖子當(dāng)著我的面吹牛虱歪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栅表,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼笋鄙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了怪瓶?” 一聲冷哼從身側(cè)響起萧落,我...
    開(kāi)封第一講書(shū)人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洗贰,沒(méi)想到半個(gè)月后找岖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敛滋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年许布,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绎晃。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜜唾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庶艾,到底是詐尸還是另有隱情袁余,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布咱揍,位于F島的核電站颖榜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏煤裙。R本人自食惡果不足惜掩完,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硼砰。 院中可真熱鬧藤为,春花似錦、人聲如沸夺刑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遍愿。三九已至存淫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沼填,已是汗流浹背桅咆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坞笙,地道東北人岩饼。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓荚虚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親籍茧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子版述,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容