day17-正則表達(dá)式

01-基本符號

1.什么是正則

正則表達(dá)式就是一個(gè)字符匹配的工具粘姜;
是由正則符號和普通字符組成束析,來匹配不同規(guī)律的字符

2.Python隊(duì)正則表達(dá)式的支持

Python中提供了一個(gè)re模塊阱州,用來支持正則表達(dá)式
fullmatch(正則表達(dá)式蟆盐,字符串)-用正則表達(dá)式去匹配字符串钻洒,如果匹配成功返回匹配結(jié)果吸祟,失敗返回none
Python中正則表達(dá)式的寫法:將正則內(nèi)容寫在字符串中,一般在這個(gè)字符串前面加r/R

import re
1普通字符

普通字符在表達(dá)式中代表字符本身

re_str = r'abc'
result = re.fullmatch(re_str,'abc')
print(result)

2 .- 匹配任意字符

在正則表達(dá)式中漫谷, .出現(xiàn)的位置仔雷,可以匹配一個(gè)任意字符
注意:一個(gè)點(diǎn)只能匹配一個(gè)字符

p匹配長度為三的字符串,中間是任意字符

re_str = r'a.c'
result = re.fullmatch(re_str,'a#c')
print(result)

3 \w-匹配字母數(shù)字下劃線

在正則表達(dá)式中舔示,\w出現(xiàn)的位置碟婆,可以匹配一個(gè)任意字母數(shù)字或者下劃線(其實(shí)也可以匹配Unicode編碼中除了阿斯科碼剩下的部分)
注意:
一個(gè)\w只能匹配一個(gè)字符
中文也可以匹配

re_str = r'\wab.'
result = re.fullmatch(re_str,'5abe')
print(result)

4 \s - 匹配空白字符

包括:空格、縮進(jìn)惕稻、制表符和換行符(\r ,\t,\n,空格)

re_str = r'\w\w\s\s..'
result  = re.fullmatch(re_str,'sf\n\ten')
print(result)

5 \d - 匹配數(shù)字字符

re_str = r'\d\d\d..'
result = re.fullmatch(re_str,'644du')
print(result)

\b - 檢測單詞邊界

注意:\b 是檢測其出現(xiàn)的位置是否是單詞邊界竖共,不會(huì)對字符進(jìn)行匹配。
當(dāng)正則表達(dá)式中出現(xiàn)了\b俺祠,匹配的時(shí)候去掉\b公给,匹配成功后再看其出現(xiàn)的位置是否是單詞邊界

單詞邊界:單詞開頭,單詞結(jié)尾蜘渣、標(biāo)點(diǎn)符號淌铐、空白符號(只有能將單詞區(qū)分開的符號都屬于單詞邊界)

匹配字符串'hello,world',并且要求w 前面是單詞邊界蔫缸,h前面也是單詞邊界

re_str = r'\bhello,\bworld'
result = re.fullmatch(re_str,' hello,wolrd')

7 ^ - 檢測字符串開頭

在match和fullmatch中沒有意義腿准,search、findall等中有意義

re_str = r'^the'
result = re.fullmatch(re_str,'the')

8 $ -檢測字符串結(jié)尾

在match和fullmatch中沒有意義拾碌,search吐葱、findall等中有意義

re_str = r'the$'
result = re.fullmatch(re_str,'the56')

9 \大寫字母 - 對應(yīng)的功能是\小寫字母的功能取反

\W \D \S \B

字符集

1.普通字符集
列如:【abc】- 匹配一個(gè)字符是a或b或c

注意:一個(gè)中括號只能匹配一個(gè)字符
正則中有特殊功能的單個(gè)符號,在中括號中表示其本身(.$^+*|)
匹配字符的組合 符號在中括號中保持原有功能\w \b \d \s \W \D \S \B

re_str = r'\d[abcd]'
result = re.fullmatch(re_str,'8d')
print(result)

2.[字符1-字符2]-表示字符1 到字符2(要求:字符1的編碼制要小于字符2)
[a-z] - 匹配所有小寫字母
[A-Z] - 匹配所有大寫字母
[a-zA-Z] - 匹配所有字母
[1-7] - 數(shù)字字符1到7
[\u4e00-\u9fa5] - 匹配所有中文
re_str = r'[a-z]'

11 [^字符集]-匹配不在字符集中的任意一個(gè)

[^abc]-匹配除了abc以外的任意一個(gè)字符
[^\d]-匹配除了數(shù)字字符以外的任意一個(gè)字符
[^a-z]-匹配除了小寫字母以外的任意一個(gè)字符

re_str = r'[^abc]'
result = re.fullmatch(re_str,'f')
print(result)

02-正則控制匹配次數(shù)

import re

1* - 匹配0次或者多次

a* - a出現(xiàn)0次或多次校翔,'','a','aaa'...都可以匹配
\d* - 任意數(shù)字出現(xiàn)0次或多次'','1''23'...都可以
[abc]* - a或b或c
[a-z]* -

注意:在[]外面的*前面需要一個(gè)字符或一個(gè)匹配字符的符號

print(re.fullmatch(r'a*b','aaab'))
print(re.fullmatch(r'[a-z]*''sdwefrefefw'))

+ 匹配一次或多次

a+ a至少出現(xiàn)一次
\d+ 數(shù)字至少出現(xiàn)一次

3.弟跑? 匹配0次或一次

a? a出現(xiàn)0次或一次

匹配一個(gè)整數(shù)
re_str = r'[+-]?[1-9]\d*'

4{}

{N} - 匹配n次,a{3}:匹配3個(gè)a
{M,N}-匹配M-n次 a{3,5} - 三個(gè)或四個(gè)或五個(gè)a
{,N} - 最多N次(0-n)
{m防症,}-至少m次

密碼:字母和數(shù)字組成孟辑,數(shù)字不開頭哎甲,6-12位
re_str = r'[A-Za-z][\dA-Za-z]{5-11}'

03-分支、捕獲和貪婪

import re

1.分支

條件1 | 條件2 - 匹配條件1或條件2
\d{2} | [a-z] - 兩個(gè)數(shù)字字符或者一個(gè)小寫字母
a\d{2} | \w{2} - a后兩個(gè)數(shù)字或者兩個(gè)數(shù)字字母下劃線

注意:正則中的分支也會(huì)出現(xiàn)短路扑浸,當(dāng)條件1可以匹配,就不會(huì)在使用條件2匹配

匹配所有的數(shù)燕偶,包括正負(fù)小數(shù)和零

re_str = r'[+-]?[1-9]\d*[.]?\d*|[+-]?0[.]\d+|0'
print(re.fullmatch(re_str,'2'))

2 () - 捕獲和分組

分組 - 將括號中的類容作為一個(gè)整體

'abc123'
'abcAJS'
re_str = r'abc(\d{3}|[A-Z]{3})'
RE = r'(\d[a-z]){3}'#數(shù)字小寫字母出現(xiàn)三次

捕獲
通過正則獲取符合條件的字串的時(shí)候喝噪,可以在正則表達(dá)式中加括號,匹配后取值只取括號中內(nèi)容

re.findall(正則表達(dá)式指么,字符串) - 在字符串中找所有符合正則表達(dá)式的結(jié)果酝惧,返回列表
取值只取括號中內(nèi)容

重復(fù)匹配
帶多個(gè)分組的正則表達(dá)式可以在分組后面通過添加\數(shù)字來重復(fù)前面第幾個(gè)分組中匹配的內(nèi)容

說明:\數(shù)字 - 代表前面第幾個(gè)分組;\1代表第一個(gè)分組

re_str = r'\d{3}([a-z]{2})a\1'
print(re.fullmatch(re_str,'235heahe'))

3.貪婪

匹配次數(shù)后加?就是貪婪匹配:*伯诬? +晚唇? ?? {m,n}? -表示盡可能少的重復(fù)

4.轉(zhuǎn)義符號

\w + * ? ( ) [^ -]
在正則表達(dá)式中偶特殊意義或特殊功能的符號前加\來取消其特殊意義
\w - 代表兩個(gè)字符,分別是\ 和w
+ 代表+字符
* 代表*字符

04-re模塊

import re

1.compile

compile(正則表達(dá)式) - 將正則表達(dá)式轉(zhuǎn)換成正則表達(dá)式對象
轉(zhuǎn)換成對象后可以通過對象調(diào)用對象方法

re_str = '\d{3}'

2.macth/fullmacth

fullmatch(正則表達(dá)式盗似,字符串)-完全匹配哩陕,從開頭到結(jié)尾
match(正則表達(dá)式,字符串)-不完全匹配赫舒,只匹配開頭

匹配成功返回匹配對象悍及,失敗返回none

匹配對象
1.獲取span - 匹配到的內(nèi)容的范圍,(開始下標(biāo)接癌,結(jié)束下標(biāo))心赶,結(jié)束下標(biāo)取不到
匹配對象.span()-獲取整個(gè)正則表達(dá)式匹配的范圍
匹配對象.span(n)-獲取整個(gè)正則表達(dá)式第n個(gè)分組匹配到的范圍

2.start和end - 獲取匹配結(jié)果的開始下標(biāo)和結(jié)束下標(biāo)
匹配對象.start()/匹配對象.end() - 獲取匹配結(jié)果的開始下標(biāo)和結(jié)束下標(biāo)
匹配對象.start(n)/匹配對象.end(n)-獲取整個(gè)正則表達(dá)式第n個(gè)分組匹配到的開始下標(biāo)和結(jié)束下標(biāo)

3.group - 獲取匹配到的內(nèi)容
匹配對象.group()-獲取整個(gè)正則表達(dá)式匹配的內(nèi)容
匹配對象.group(n)-獲取整個(gè)正則表達(dá)式第n個(gè)分組匹配到的內(nèi)容

4.string - 獲取用來匹配的原字符串
匹配對象.string

3.search

search(正則表達(dá)式,字符串)-匹配字符串中第一個(gè)滿足正則表達(dá)式的字串缺猛,匹配成功返回匹配對象缨叫,不成功返回none
有多個(gè)只匹配第一個(gè)

4.split

split(正則表達(dá)式,字符串)-在字符串中按照滿足正則表達(dá)式的字串對字符串進(jìn)行切割
返回值是個(gè)列表

5.sub

sub(正則表達(dá)式荔燎,新字串耻姥,字符串)-用新串替換字串,返回一個(gè)替換后的字符串

6.findall

findall(正則表達(dá)式有咨,字符串)-在字符串中獲取滿足正則表達(dá)式的所有字符咏闪,返回一個(gè)列表,元素是字符串

注意:如果正則表達(dá)式中有一個(gè)分組摔吏,結(jié)果是表達(dá)式中那個(gè)分組匹配到的結(jié)果
如果表達(dá)式中分組個(gè)數(shù)大于1鸽嫂,結(jié)果是一個(gè)列表,元素是元組征讲,元組中內(nèi)容是匹配到的內(nèi)容

6.finditer

finditer(表達(dá)式据某,字符串)- 獲取字符串中表達(dá)式的內(nèi)容,返回一個(gè)迭代器诗箍,元素是匹配對象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末癣籽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筷狼,老刑警劉巖瓶籽,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埂材,居然都是意外死亡塑顺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門俏险,熙熙樓的掌柜王于貴愁眉苦臉地迎上來严拒,“玉大人,你說我怎么就攤上這事竖独】氵耄” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵莹痢,是天一觀的道長种蘸。 經(jīng)常有香客問我,道長竞膳,這世上最難降的妖魔是什么劈彪? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮顶猜,結(jié)果婚禮上沧奴,老公的妹妹穿的比我還像新娘。我一直安慰自己长窄,他們只是感情好滔吠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挠日,像睡著了一般疮绷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嚣潜,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天冬骚,我揣著相機(jī)與錄音,去河邊找鬼懂算。 笑死只冻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的计技。 我是一名探鬼主播喜德,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垮媒!你這毒婦竟也來了舍悯?” 一聲冷哼從身側(cè)響起航棱,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萌衬,沒想到半個(gè)月后饮醇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秕豫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年朴艰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馁蒂。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呵晚,死狀恐怖蜘腌,靈堂內(nèi)的尸體忽然破棺而出沫屡,到底是詐尸還是另有隱情,我是刑警寧澤撮珠,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布沮脖,位于F島的核電站,受9級特大地震影響芯急,放射性物質(zhì)發(fā)生泄漏勺届。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一娶耍、第九天 我趴在偏房一處隱蔽的房頂上張望免姿。 院中可真熱鬧,春花似錦榕酒、人聲如沸胚膊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紊婉。三九已至,卻和暖如春辑舷,著一層夾襖步出監(jiān)牢的瞬間喻犁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工何缓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肢础,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓碌廓,卻偏偏與公主長得像乔妈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子氓皱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

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