day17-正則表達(dá)式

正則符號(hào)

1.什么是正則

正則是字符串匹配的一種工具因痛,擁有自己的語(yǔ)法蒿柳。語(yǔ)法中主要包含各種符號(hào)的使用

2.正則語(yǔ)法

re.fullmatch(正則表達(dá)式近顷,字符串) - 檢查字符串是否完全符合正則表達(dá)式的規(guī)則(完全匹配)
匹配成功返回匹配對(duì)象泽论,失敗返回None
正則表達(dá)式 - python中正則表達(dá)式是寫在引號(hào)(單引號(hào)或雙引號(hào))中的內(nèi)容步做,
一般會(huì)在引號(hào)的前面加r
r'正則表達(dá)式'

js中的正則:/正則表達(dá)式/

print('==============匹配符號(hào)=================')
# 1)普通字符  -   除了正則中有特殊功能和特殊意義以外的其他所有字符
# 普通字符在正則中表示字符本身
# 例如:a,b,c,1,2,3,~,你,

# 表示一個(gè)字符串有三個(gè)字符,每個(gè)字符分別是a,b,c
re_str = r'abc'
result = re.fullmatch(re_str, 'abc')
print(result)

2) . - 匹配任意字符

正則中出現(xiàn) . 的位置可以匹配任意字符
一個(gè) . 只能匹配任意字符

# 匹配一個(gè)長(zhǎng)度是3的字符串酣胀,字符開(kāi)頭是a刁赦,結(jié)尾是b,中間任意字符
re_str = r'a.b'
result = re.fullmatch(re_str, 'a9b')
print(result)

3)\w - 匹配字符闻镶、數(shù)字或者下劃線(只針對(duì)ascii碼有效)

一個(gè)\w只能匹配一個(gè)字符
注意:Unicode碼中除了ASCII表以外的其他字符都能匹配

result = re.fullmatch(r'a\wb.', 'a_b4')
print(result)

4)\s - 匹配一個(gè)空白字符

空白:空白甚脉、回車/換行、制表符

result = re.fullmatch(r'abc\s123', 'abc\n123')
print(result)

5) \d - 匹配一個(gè)數(shù)字字符

result = re.fullmatch(r'a\d\db', 'a89b')
print(result)

6) \大寫字母 - 匹配非\小寫字母匹配到的內(nèi)容

\W - 匹配非數(shù)字铆农、字母牺氨、下劃線
\S - 匹配非空白字符
\D - 匹配非數(shù)字字符

result = re.fullmatch(r'\D\Dabc\S123', 'qwabc1123')
print(result)

7) [] - 匹配字符集

a.普通用法
[字符集] - 匹配字符集中的任意字符
[az1+] - 匹配一個(gè)字符是a或者z或者1或者+
[\dabc] - 匹配一個(gè)字符是數(shù)字或者a或者b或者c

b.表示范圍的字符集 [字符1-字符2] - 從字符1到字符2中任意一個(gè)字符,字符2的編碼值必須大于字符1
[5-9] - 匹配數(shù)字字符5到9中任意一個(gè)
[a-z] - 匹配小寫字母中的任意一個(gè)
[a-zA-Z] - 匹配任意一個(gè)字母
[a-zA-Z\d_] - 匹配字母數(shù)字下劃線

c.反向選中:[^字符集] - 選中除了字符集中以外的其他的任意一個(gè)字符
[^abc] - 只要不是a或者b或者c都匹配

print(re.fullmatch(r'[az1]abc', '1abc'))
print(re.fullmatch(r'[\daz1]abc', '3abc'))
print(re.fullmatch(r'[a-z]abc', 'vabc'))
print(re.fullmatch(r'[5-8][5-8]', '67'))

print('==============檢測(cè)符號(hào)=================')
# 一個(gè)匹配符號(hào)必須對(duì)應(yīng)一個(gè)具體的字符墩剖;檢測(cè)符號(hào)只是對(duì)符號(hào)所在的位置進(jìn)行檢查猴凹,不會(huì)影響字符串的長(zhǎng)度
# 1)\b    -   檢測(cè)是否是單詞邊界
"""
單詞邊界:一切可以將兩個(gè)單詞區(qū)分開(kāi)的符號(hào)都是單詞邊界,例如單詞開(kāi)頭岭皂、單詞結(jié)尾郊霎、空白標(biāo)點(diǎn)符號(hào)等
"""
# 匹配一個(gè)字符串是'howare',然后檢測(cè)w的后面是否是單詞邊界
print(re.fullmatch(r'how\b are', 'how are'))
# 2) ^  -   檢測(cè)^所在的位置是否是字符串開(kāi)頭
print(re.fullmatch(r'^abc', 'abc'))
print(re.search(r'abc', '123abc567'))
# 3) $    -   檢測(cè)$所在的位置是否是字符串結(jié)尾

1.匹配次數(shù)

1)* - 匹配0次或多次

字符 * 前的字符出現(xiàn)0次或者多次
r'a
' - '', 'a', 'aa', 'aaa'

print(re.fullmatch(r'a\d*b', 'a3534656b'))

2) + 匹配一次或多次

print(re.fullmatch(r'a\d+b', 'a8823b'))

3)? 匹配0次或一次

print(re.fullmatch(r'[+-]?\d+', '+293'))

4){}

{N} - 匹配N次
{M,N} - 匹配M到N次
{M,} - 匹配至少M(fèi)次
{,N} - 匹配最多N次

print(re.fullmatch(r'a{3}123', 'aaa123'))
print(re.fullmatch(r'a{2,5}123', 'aaa123'))
print(re.fullmatch(r'a{2,}123', 'aa123'))
print(re.fullmatch(r'a{,2}123', 'aa123'))

# qq = input('請(qǐng)輸入球球號(hào)')
# print(re.fullmatch(r'[1-9]\d{4,11}', qq))
# user_name = input('賬號(hào)')
# print(re.fullmatch(r'[\da-zA-Z_]{6,20}', user_name)

2.貪婪和非貪婪

, +, ?, {}對(duì)應(yīng)匹配次數(shù)是貪婪爷绘;在匹配次數(shù)不確定的時(shí)候才有貪婪和非貪婪區(qū)分
在匹配次數(shù)不確定的符號(hào)后面叫书劝?进倍,就會(huì)變成貪婪:
?, +?购对,猾昆??骡苞,{M,N}?,{M,}?, {,N}?

貪婪:在匹配成功的前提下盡可能多的匹配
非貪婪:在匹配成功的前提下垂蜗,盡可能少的匹配

result = re.search(r'.+b', '123bcccbdddb====')
print(result)
print(re.search(r'.+?b', '123bcccbdddb===='))

3.分之

正則表達(dá)式1|正則表達(dá)式2

print(re.fullmatch(r'\d{3}|[a-zA-Z]{3}', 'asd'))

4. () - 分組

1.分組 - 將正則中的一部分看成一個(gè)整體進(jìn)行操作
2.重復(fù) - 添加分組后,可以在分組的后面通過(guò)'\M'來(lái)處重復(fù)前面第M個(gè)分組匹配到的結(jié)果

print(re.fullmatch(r'(\d{3}|[a-zA-Z]{3})[A-Z]+', '123WEEWFSD'))
print(re.fullmatch(r'(\d{2}:)+\d\d', '23:43:36:78'))
print(re.fullmatch(r'(\d+)abc\1', '100abc100'))

5.轉(zhuǎn)義符號(hào) - 在正則符號(hào)前加\烙如,讓這個(gè)符號(hào)的功能消失

正則中的轉(zhuǎn)義符號(hào)和字符串的轉(zhuǎn)義字符不一樣
獨(dú)立額特殊符號(hào)放在[]中特殊意義會(huì)自動(dòng)消失么抗,但-,[] ... 除外

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

print(re.fullmatch(r'\d\+\\d', '2+\d'))
print(re.fullmatch(r'[.+*]abc[?]', '.abc?'))    # .  *  +  ?
print(re.fullmatch(r'[a\-z]abc', '-abc'))

print(re.fullmatch(r'[a\]]abc', ']abc'))

1.創(chuàng)建正則對(duì)象

compile(正則表達(dá)式) - 根據(jù)正則表達(dá)式創(chuàng)建正則對(duì)象

re_obj = compile(r'\d{3}')
print(re_obj.fullmatch('234'))

2.匹配

fullmatch(正則表達(dá)式,字符串) - 讓整個(gè)字符串和正則表達(dá)式進(jìn)行匹配
match(正則表達(dá)式, 字符串) - 匹配字符串開(kāi)頭
返回值:匹配成功是匹配結(jié)果對(duì)象亚铁,匹配失敗是None

result = fullmatch(r'\d{3}[a-z]{4}', '123jsdv')
print(result)

result = match(r'(\d{3})[a-z]{4}', '124sdfsaqqw你好')
print(result)

匹配結(jié)果
1)匹配結(jié)果對(duì)應(yīng)的字符串

匹配對(duì)象.group() - 獲取整個(gè)正則匹配到的結(jié)果
匹配對(duì)象.group(N) - 獲取第N個(gè)分組匹配到的結(jié)果

print(result.group())
print(result.group(1))

2)獲取匹配位置

匹配對(duì)象.span(group=0)
匹配對(duì)象.start(group=0)
匹配對(duì)象.end(group=0)

print(result.span(1))
print(result.start())
print(result.end())

3)獲取原字符串

print(result.string)

3.查找

search(正則表達(dá)式, 字符串) - 匹配出字符串中第一個(gè)滿足正則表達(dá)式的字串蝇刀,結(jié)果是匹配對(duì)象
findall(正則表達(dá)式, 字符串) - 獲取字符串中滿足正則表達(dá)式的所有字串;結(jié)果是列表徘溢,列表中是字符串
finditer(正則表達(dá)式, 字符串) - 獲取字符串中滿足正則表達(dá)式的所有的字串吞琐;結(jié)果是迭代器,迭代器的元素是匹配對(duì)象

result = search(r'\d{3}', 'how2144b345in432ln567')
print(result)

result = findall(r'\d{3}', 'how2144b345in432ln567')
print(result)

result = findall(r'(\d{3})a', 'how2144ab345in432aln567')
print(result)

result = finditer(r'(\d{3})a', 'how2144ab345in432aln567')
print(next(result))
print(next(result))

4.切割

split(正則表達(dá)式, 字符串) - 按照滿足正則表達(dá)式的字串對(duì)字符串進(jìn)行切割然爆,返回列表

str1 = 'aaa9bb99ddsf239945529dg14956'
print(str1.split('9'))

print(split(r'\d+', str1))

5.替換

sub(正則表達(dá)式, 字符串1, 字符串2, 替換次數(shù)=0) - 將字符串2中滿足正則表達(dá)式的字串替換成字符串1
替換次數(shù)為0則全部替換

str1 = 'aaa9bb99ddsf239945529dg14956'
new_str = sub(r'\d+', '+', str1, 2)
print(new_str)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末站粟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子曾雕,更是在濱河造成了極大的恐慌奴烙,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剖张,死亡現(xiàn)場(chǎng)離奇詭異切诀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)搔弄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門幅虑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人顾犹,你說(shuō)我怎么就攤上這事倒庵。” “怎么了炫刷?”我有些...
    開(kāi)封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵擎宝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我浑玛,道長(zhǎng)认臊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任锄奢,我火速辦了婚禮失晴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拘央。我一直安慰自己涂屁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布灰伟。 她就那樣靜靜地躺著拆又,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栏账。 梳的紋絲不亂的頭發(fā)上帖族,一...
    開(kāi)封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音挡爵,去河邊找鬼竖般。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茶鹃,可吹牛的內(nèi)容都是我干的涣雕。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼闭翩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挣郭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疗韵,我...
    開(kāi)封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤兑障,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蕉汪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體流译,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年肤无,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了先蒋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宛渐,死狀恐怖竞漾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窥翩,我是刑警寧澤业岁,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站寇蚊,受9級(jí)特大地震影響笔时,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仗岸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一允耿、第九天 我趴在偏房一處隱蔽的房頂上張望借笙。 院中可真熱鬧,春花似錦较锡、人聲如沸业稼。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)低散。三九已至,卻和暖如春骡楼,著一層夾襖步出監(jiān)牢的瞬間熔号,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工鸟整, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留引镊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓吃嘿,卻偏偏與公主長(zhǎng)得像祠乃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兑燥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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

  • 01-基本符號(hào) 1.什么是正則 正則表達(dá)式就是一個(gè)字符匹配的工具亮瓷;是由正則符號(hào)和普通字符組成,來(lái)匹配不同規(guī)律的字符...
    71a5d7e107e5閱讀 314評(píng)論 0 0
  • 17.1 正則基本符號(hào) 1.什么是正則表達(dá)式 正則表達(dá)式就是字符匹配的工具降瞳,用來(lái)做正則匹配嘱支;是由正則符號(hào)和普通字符...
    2333_11f6閱讀 244評(píng)論 0 0
  • 前言回顧 1.運(yùn)算符重載 通過(guò)在類中實(shí)現(xiàn)運(yùn)算符對(duì)應(yīng)的魔法方法,來(lái)讓類的對(duì)象支持相關(guān)運(yùn)算符的操作 2.內(nèi)存管理(面試...
    不語(yǔ)sun閱讀 363評(píng)論 0 0
  • 1.正則基本符號(hào) 1.什么是正則表達(dá)式正則表達(dá)式就是字符匹配工具挣饥;是由正則符號(hào)和普通字符組成除师,來(lái)匹配不同規(guī)律的字符...
    楊海py閱讀 799評(píng)論 0 0
  • 今天從網(wǎng)上買的衣服和鞋都到了,還比較滿意扔枫,果然人瘦了之后穿什么都比較好看汛聚,但是腿還是有很大的減肥空間,再堅(jiān)持下短荐,到...
    不開(kāi)燈的房間s閱讀 102評(píng)論 0 0