day 16

part 1 正則表達(dá)式

正則表達(dá)式:用來做字符串查找善绎、匹配诫尽、切割的一種工具。
Python對正則表達(dá)式的支持,提供re模塊(Python內(nèi)置的模塊)
包含字符串匹配驹止,查找,切割的相關(guān)的方法
fullmatch(正則表達(dá)式衣洁,字符串):用正則表達(dá)式和字符串進(jìn)行
匹配坊夫,看能否成功匹配撤卢。
正則表達(dá)式:是一個符合正則規(guī)范的字符串

import re
#正則表達(dá)式的字符串前面要加r阻止轉(zhuǎn)義,
# 因?yàn)檎齽t表達(dá)式的符號中有很多帶轉(zhuǎn)義符號智听,
# 其功能不是轉(zhuǎn)義到推,而是表示特殊的意義惕澎。
#1. .:匹配一個任意字符
re_str = '.'
re.fullmatch(re_str, 'a')
#2.匹配第一個字符是a第二個字符是b
re_str = 'ab'
re_str = 'a.'
#3匹配第一個字符是a第二個字符是任意字符的字符串
re_str = r'a.'
#4.\w:匹配一個字符是字母,數(shù)字捣卤,或者下劃線
re_str = r'\w'
print(re.fullmatch(re_str,'b'))
#5.\s匹配一個空白字符(空格腌零、換行唆阿、制表符))
re_str = 'ar\sb'
#\d 匹配一個數(shù)字字符
re_str = '\d\d\d'
print(re.fullmatch(re_str,120))
#6.邊界檢測
\b
#字符開開始和結(jié)束都是邊界
#匹配三個任意字符的前面和后面都是單詞邊界的字符串
#^匹配字符串的開始
#(^the)匹配以the為開頭的字符串
re_str = r'^the'
print(re.fullmatch(re_str,'the'))
#7.匹配字符串結(jié)束
re_str = r'abc$'
#8.\W 匹配非數(shù)字字母下劃線

#9.\S匹配非空白字符
#10\D匹配非數(shù)字字符
#11\B 檢測非邊界
re_str = r'ab\B

part 2

import re

"""

1.匹配中括號中出現(xiàn)的任意一個字符
匹配一一個字符串驯鳖,前三位是abc,第四位是字符1或者字符a
"""
re_str = r'abc[1a]'
print(re.fullmatch(re_str, 'abca'))

#第一個是數(shù)字或者下劃線扭弧,后面是abc
re_str = r'[\d_]abc'
print(re.fullmatch(re_str, '9abc'))

#2.[^]匹配不在中括號中出現(xiàn)的任意一個字符
re_str =r'abc[^\da]'
#匹配一個字符串记舆,前三位是abc,第四位不是數(shù)字字符也不是字符a

#3.*匹配0次或者多次
re_str =r'\d*abc'
#匹配一個字符串前面是0個或者是多個數(shù)字字符,然后是abc
# [0-9]匹配1到9
# [a-z]匹配小寫字母a-z
# [A-Z]匹配任意一個大寫字母
#[a-zA-z]匹配任意字母
#寫一個正則表達(dá)式匹配判斷一個字符串是數(shù)字字符串
re_str = r'\d[0-9]*'
print(re.fullmatch(re_str, '123'))

#寫一個正則表達(dá)式檢測一個字符串是否是合格的標(biāo)識符(字母數(shù)字下劃線)
re_str = r'[a-zA-z_]\w*'
print(re.fullmatch(re_str, 'name'))
#4.+:匹配一個字符串或者多次
#匹配一個字符串開頭出現(xiàn)一個或者多次數(shù)字字符御蒲,然后在有0次或者多次數(shù)字衣赶,字母,下劃線
re_str = r'\d+\w*'
print(re.fullmatch(re_str, '12u3abc'))
#5.?:匹配出現(xiàn)0次或者1次
re_str = r'[a-z]?123'
print(re.fullmatch(re_str, 'a123'))

#判斷一個字符串是不是正整數(shù)字符串
re_str = r'[+]?[1-9]\d*'
print(re.fullmatch(re_str, '+0123'))
#6匹配N次{N}
re_str = r'\d{5}abc'
#前面5個數(shù)字然后abc

#6.{n,} >=n次
#7厚满,{m,n}最少M(fèi)次最多N次
#8 |:分支
#匹配一個字符串府瞄,是三個數(shù)字字符或者三個小寫字母
re_str = r'\d{3}|\[a-z]{3}'

#9括號()匹配的時候是分組,讓括號中的正則條件變成一個整體
  """========以下了解========"""
    # 盡可能少:在能夠匹配到的前提下盡可能少
    # 10. *? 重復(fù)任意次碘箍,盡可能少的重復(fù)
    re_str = r'ba*?b'
    print(re.match(re_str, 'baabaa'))

    # 11. +? 重復(fù)一次或多次遵馆,盡可能少的重復(fù)
    re_str = r'ba+?'
    print(re.match(re_str, 'baaaa'))

    # 12. ?? 重復(fù)0次或者1次, 盡可能少的重復(fù)
    re_str = r'b??'

    # 13. {N,}? 重復(fù)至少N次丰榴,盡可能少的重復(fù)
    # 14. {N, M}? 重復(fù)N到M次货邓,盡可能少的重復(fù)

part 3 轉(zhuǎn)義

1.特殊符號轉(zhuǎn)義
正則中:. \ [] {} () * + ? ^ $ | 這些字符有特殊意義多艇,所以在正則表達(dá)式中逻恐,
如果想要單純表達(dá)這些字符,需要在前面加'';

注意:1. -峻黍,[],^,\ 在中括號中可能是特殊的符號,需要加
2. . {} () * + ? $ |在中括號中可以不用加,來表示字符

part 4 模塊方法

import re
"""
1.compile(正則字符串)講正則表達(dá)式字符串轉(zhuǎn)換成正則表達(dá)式對象
#轉(zhuǎn)換成正則表達(dá)式對象后复隆,可以通過對象調(diào)用方法。
"""
re_obct = re.compile(r'\w{6,12}')
print(re_obct.fullmatch('dwadwa'))

#匹配相關(guān)的方法
#2.full,match(正則表達(dá)式,需要匹配的字符串)完全匹配
#返回值是匹配對象,如果不成功返回None
match = re.fullmatch('\w{3}', '132')
print(match)
#a.獲取匹配到的結(jié)果
print(match.group())
#b.獲取匹配到的范圍
print(match.span())
print(match.start())#開始下標(biāo)
print(match.end())#結(jié)束下標(biāo)
print(match.string)
#3.match(正則表達(dá)式姆涩,字符串)不完全匹配挽拂,從字符串開頭匹配,匹配到正則表達(dá)式對應(yīng)的范圍為止骨饿。
match = re.match(r'\w{3}', 'hedslakdl')
print(match.group())
print(match.string)
#應(yīng)用:判斷一個字符串是否以某種字符串開頭
#4.search(正則表達(dá)式亏栈,字符串)在指定的字符串中查找某種字符串(以正則表達(dá)式來描述)
print(re.search(r'\d{2,}[a-z]', '1245465dwad113'))

#返回值是匹配對象,如果找不到返回None
#判斷一個字符串中是否包含某種字符串

#5.findall(正則表達(dá)式宏赘,字符串)獲取指定字符串中所有滿足正則條件的所有的子串
#返回值是一個列表绒北,列表里都是符合要求的字符串
result = re.findall(r'[a-zA-Z](\d+)','a132bdwa456465dwa')
print(result)
#注意:在通過正則表達(dá)式獲取子串的時候,可以通過在正則表達(dá)式中添加括號察署,來約束獲取的內(nèi)容(只獲取括號中匹配的內(nèi)容)匹配所有闷游。
#應(yīng)用:字符串提取
#括號語法無效
result = re.finditer(r'[a-zA-Z](\d+)','a132bdwa456465dwa')#返回一個迭代器,迭代器的內(nèi)容是匹配對象
print(result.__next__())

#7.re.split(正則表達(dá)式贴汪,字符串)按正則表達(dá)式匹配到的字符串進(jìn)行切割
result = re.split(r'/d+', '12ds4a364dsa4d3sa15')
print(result)
#sub替換(正則表達(dá)式脐往,替換字符串,原字符串)原字符串查找符合正則的子串扳埂,替換成新的字符串
#將制定字符串所有的SB替換成*
str1 = '傻逼业簿,你好sb,你全家都是SB,傻逼阳懂,傻子'
result = re.sub(r'sb|SB|Sb|sB|傻逼|傻', '**', str1)
print(result)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梅尤,一起剝皮案震驚了整個濱河市柜思,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌克饶,老刑警劉巖酝蜒,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異矾湃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堕澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門邀跃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛙紫,你說我怎么就攤上這事拍屑。” “怎么了坑傅?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵僵驰,是天一觀的道長。 經(jīng)常有香客問我唁毒,道長蒜茴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任浆西,我火速辦了婚禮粉私,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘近零。我一直安慰自己诺核,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布久信。 她就那樣靜靜地躺著窖杀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裙士。 梳的紋絲不亂的頭發(fā)上入客,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音潮售,去河邊找鬼痊项。 笑死,一個胖子當(dāng)著我的面吹牛酥诽,可吹牛的內(nèi)容都是我干的鞍泉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肮帐,長吁一口氣:“原來是場噩夢啊……” “哼咖驮!你這毒婦竟也來了边器?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤托修,失蹤者是張志新(化名)和其女友劉穎忘巧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦刃,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砚嘴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涩拙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片际长。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兴泥,靈堂內(nèi)的尸體忽然破棺而出工育,到底是詐尸還是另有隱情,我是刑警寧澤搓彻,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布如绸,位于F島的核電站,受9級特大地震影響旭贬,放射性物質(zhì)發(fā)生泄漏怔接。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一骑篙、第九天 我趴在偏房一處隱蔽的房頂上張望蜕提。 院中可真熱鬧,春花似錦靶端、人聲如沸谎势。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脏榆。三九已至,卻和暖如春台谍,著一層夾襖步出監(jiān)牢的瞬間须喂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工趁蕊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坞生,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓掷伙,卻偏偏與公主長得像是己,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子任柜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

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