Day17學(xué)習(xí)總結(jié)-正則表達(dá)式

1.什么是正則表達(dá)式(語(yǔ)法通用)

正則就是一種用來(lái)做字符串匹配的工具蜀撑,通過(guò)不同的符號(hào)匹配不同的字符

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

通過(guò)re模塊提供相應(yīng)支持正則表達(dá)式的方法
a.fullmatch(正則表達(dá)式至壤, 字符串) --> 用正則表達(dá)式和指定字符串進(jìn)行匹配,
如果匹配成功則返回匹配對(duì)象,匹配失敗則返回None
python中的正則表達(dá)式是寫(xiě)在字符串中的咆耿,但是一般情況下會(huì)在最前面加r/R

from re import fullmatch, search


def main():
    # 0.   普通字符(代表字符本身)
    # 匹配一個(gè)字符串杆煞,只有三個(gè)字符,每個(gè)字符分別是a,b,c
    re_str = r'abc'
    result = fullmatch(re_str, 'abc')
    print(result)

    # 1.   .(匹配任意字符)

    # 注意:a.一個(gè).代表一個(gè)字符
    #       b. .不能匹配\n

    # 匹配一個(gè)字符串蘑险,只有三個(gè)字符滴肿,第一個(gè)字符是a, 第二個(gè)字符是任意字符,第三個(gè)字符是c
    re_str = r'a.c'
    result = fullmatch(re_str, 'adc')
    print(result)

    # 2. \w(匹配字母數(shù)字下劃線(xiàn)中文)

    # 注意:a.也可以匹配中文(只要是在A(yíng)SCII碼表以外的字符都可以)
    #       b.一個(gè)\w只能匹配一個(gè)字符

    # 匹配一個(gè)字符串佃迄,第一個(gè)字符是任意字符泼差,第二個(gè)和第三個(gè)字符是字母、數(shù)字或者_(dá)呵俏,最后三個(gè)是abc
    re_str = r'.\w\wabc'
    result = fullmatch(re_str, '中給_abc')
    print(result)

    # 3. \s(匹配空白字符)

    # 空白字符:指的是所有能產(chǎn)生空白的字符堆缘、包括空格、制表符普碎、換行
    # 匹配一個(gè)字符串吼肥,前兩個(gè)字符是字母、數(shù)字麻车、下劃線(xiàn)或者中文缀皱,第三個(gè)字符是空白,最后一個(gè)字符是任意字符
    re_str = r'\w\w\s.'
    result = fullmatch(re_str, 'ab\n5')
    print(result)

    # 4. \d(匹配數(shù)字字符)
    # 匹配一個(gè)字符串有三個(gè)字符动猬,每個(gè)字符都是數(shù)字字符
    re_str = r'\d\d\d'
    result = fullmatch(re_str, '526')
    print(result)

    # 5. \b(檢測(cè)單詞邊界)
    # a.檢測(cè)正則表達(dá)式中\(zhòng)b所在的位置是否是單詞邊界
    # b.單詞邊界:所有可以將兩個(gè)單詞區(qū)分開(kāi)的符號(hào)都是單詞邊界唆鸡,例如:空格,縮進(jìn)枣察,標(biāo)點(diǎn)符號(hào)等争占,單詞開(kāi)頭燃逻,單詞結(jié)尾

    # 注意:\b不是匹配符號(hào),不會(huì)匹配出一個(gè)字符臂痕,只是檢測(cè)所在的位置是否滿(mǎn)足要求伯襟。
    # 匹配一個(gè)字符串的內(nèi)容是'how are', 并且要求字符'a'的前面是單詞邊界
    re_str = r'\bhow \bare'
    result = fullmatch(re_str, 'how are')
    print(result)

    print(fullmatch(r'\b\d\d\d', '586'))
    print(search(r'\b\d\d\d\b', 'sdfe954, 586,'))

    # 6. ^(檢測(cè)字符串開(kāi)頭)
    # 匹配一個(gè)字符串是三個(gè)數(shù)字字符,并且第一個(gè)字符所在的位置是字符串開(kāi)頭
    re_str = '^\d\d\d'
    result = search(re_str, '598gefeve484geg')
    print(result)

    # 7. $(檢測(cè)字符串結(jié)尾)
    # 匹配一個(gè)字符串是三個(gè)數(shù)字字符握童,并且最后一個(gè)字符的后面是字符串結(jié)尾
    re_str = r'\d\d\d$'
    result = search(re_str, 'fegg856geg695')
    print(result)

    # 8. \B(檢測(cè)非單詞邊界)
    re_str = r'abc\B123'
    result = fullmatch(re_str, 'abc123')
    print(result)

    # 9. \W(匹配非數(shù)字字母下劃線(xiàn)中文)

    # 10. \S(匹配非空白字符)

    # 11. \D(匹配非數(shù)字字符)

    # 12. [字符集](匹配字符集中的任意一個(gè)字符)

    # 注意:一個(gè)[]代表一個(gè)字符
    # a.普通用法
    # [字符集] - 匹配字符集中的任意一個(gè)字符
    # b.表示范圍
    # [字符1-字符2] - 匹配字符1到字符2中所有的字符姆怪。要求字符1的編碼值要小于字符2的編碼值
    # [1-9] - 數(shù)字1到9
    # [a-z] - 小寫(xiě)字母
    # [A-Z] - 大寫(xiě)字母
    # [a-zA-Z] - 所有字母
    # [a-zA-Z\d_] - 數(shù)字字母下劃線(xiàn)
    # 匹配一個(gè)字符串有4個(gè)字符,第一個(gè)字符是'a'或者'b'或者'c'澡绩,后邊是123
    re_str = r'[abc]123'
    result = fullmatch(re_str, 'a123')
    print(result)
    result = fullmatch(re_str, 'b123')
    print(result)
    result = fullmatch(re_str, 'c123')
    print(result)

    # 匹配一個(gè)字符串有4個(gè)字符稽揭,第一個(gè)字符是數(shù)字1-9中的任意一個(gè);最后一個(gè)字符是任意一個(gè)小寫(xiě)字母肥卡;
    # 中間兩個(gè)字符是任意數(shù)字
    re_str = r'[1-9]\d\d[a-z]'
    result = fullmatch(re_str, '585a')
    print(result)

    re_str = r'[a-zA-Z\d_]'
    result = fullmatch(re_str, 's')
    print(result)

    # 13. [^字符集](匹配沒(méi)有在字符集中的其他任意字符)

    # 注意:^放在[]的最前面才表示匹配不在字符集中的其他任意字符溪掀;^如果不放在[]的最前面,就表示字符^本身
    # 匹配一個(gè)字符串步鉴,第一個(gè)字符只要不是abc中的一個(gè)揪胃,其他字符都可以,后面是123
    re_str = r'[^abc]123'
    result = fullmatch(re_str, 'f123')
    print(result)

    # 匹配一個(gè)字符串氛琢,第一個(gè)字符只要不是1到9中的一個(gè)喊递,其他字符都可以,后面是123
    re_str = r'[^1-9]123'
    result = fullmatch(re_str, 'f123')
    print(result)

    # 14. 轉(zhuǎn)義符號(hào)
    # a.正則中也可以通過(guò)在特殊符號(hào)前加'\'來(lái)對(duì)符號(hào)進(jìn)行轉(zhuǎn)義
    # \\ - \字符
    # \. - .字符
    # \^ - ^字符

    # b.除了在中括號(hào)中有特殊意義的符號(hào)阳似,其他符號(hào)放在[]中也是表示符號(hào)本身
    # - :在中括號(hào)中的兩個(gè)字符之間表示誰(shuí)到誰(shuí)骚勘,如果想要表示它本身就不要放在兩個(gè)字符之間
    # ^ :在中括號(hào)的最前面有特殊意義,如果想要表示它本身就不要放在最前面
    # []:在中括號(hào)中表示[]撮奏,要加\

    # 注意:轉(zhuǎn)義字符是字符串中的概念
    #       轉(zhuǎn)義符號(hào)是正則表達(dá)式的概念

    re_str = r'\d\d\.\d\d'
    result = fullmatch(re_str, '23.45')
    print(result)


if __name__ == '__main__':
    main()

import re


def main():
    # 1. *(匹配0次或多次)
    # 字符*  -  指定的字符出現(xiàn)0次或者多次(這兒的字符可以是正則符號(hào)俏讹,也可以是普通字符)
    # a* - a出現(xiàn)0次或者多次
    # \d* - 任意數(shù)字出現(xiàn)0次或者多次
    # [a-z]* - 任意小寫(xiě)字母出現(xiàn)0次或者多次

    # 123前面有0個(gè)或者多個(gè)字符,并且每個(gè)字符都是a
    re_str = r'a*123'
    print(re.fullmatch(re_str, 'aaa123'))

    # 123前面有0個(gè)或者多個(gè)字符挽荡,并且每個(gè)字符都是數(shù)字字符
    re_str = r'\d*123'
    print(re.fullmatch(re_str, '12123'))

    re_str = r'[a-z]*123'
    print(re.fullmatch(re_str, 'az123'))

    # 2. +(匹配1次或多次)
    re_str = r'a+123'
    print(re.fullmatch(re_str, 'aaa123'))

    # 3. 藐石?(匹配0次或者1次)
    re_str = r'\+?abc'
    print(re.fullmatch(re_str, '+abc'))

    # 練習(xí):寫(xiě)一個(gè)正則表達(dá)式能夠匹配所有的整數(shù)字符串
    re_str = r'[+-]?[1-9]\d*'
    print(re.fullmatch(re_str, '884'))

    # 4. {}
    # {M,N} - 匹配M到N次(最少M(fèi)次即供,最多N次)
    # {M,}  - 匹配至少M(fèi)次
    # {,N}  - 匹配最多N次
    # {N}   - 匹配N(xiāo)次
    print(re.fullmatch(r'a{2,5}', 'aaaaa'))

    # 密碼:6-16位定拟,只能包含數(shù)字和字母
    print(re.fullmatch(r'[a-zA-Z\d]{6,16}', '5996548'))


if __name__ == '__main__':
    main()

1. |(分支)

表達(dá)式1|表達(dá)式2|表達(dá)式3|... - 先用表達(dá)式1進(jìn)行匹配,匹配成功就直接成功逗嫡;
不成功就使用表達(dá)式2去匹配青自;匹配失敗再用表達(dá)式3去匹配...以此類(lèi)推
(三(N)個(gè)表達(dá)式中只要有一個(gè)能夠匹配成功就成功,否則匹配失敗)

2. ()(分組)

a.分組 - 將括號(hào)里面的內(nèi)容看成一個(gè)整體
(abc){2} --> abcabc
abc{2} --> abcc

b.分組重復(fù) - 在有分組的正則表達(dá)式中驱证,可以在分組的后面通過(guò) '\數(shù)字' 來(lái)重復(fù)前面第幾個(gè)分組匹配到的內(nèi)容
(\d{2})abc\1 --> 78abc78

import re

def main():
    re_str = r'[a-z]{3}|\d{3}'
    print(re.fullmatch(re_str, 'geg'))

    re_str = r'abc([A-Z]{2}|\d{2})'
    print(re.fullmatch(re_str, 'abcFE'))

    re_str = r'(abc){2}'
    print(re.fullmatch(re_str, 'abcabc'))

    re_str = r'(\d{2})a(\d{3})bc\2{2}\1'
    print(re.fullmatch(re_str, '59a586bc58658659'))


if __name__ == '__main__':
    main()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末延窜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抹锄,更是在濱河造成了極大的恐慌逆瑞,老刑警劉巖荠藤,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異获高,居然都是意外死亡哈肖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)念秧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淤井,“玉大人,你說(shuō)我怎么就攤上這事摊趾”液荩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵砾层,是天一觀(guān)的道長(zhǎng)漩绵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)梢为,這世上最難降的妖魔是什么渐行? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮铸董,結(jié)果婚禮上祟印,老公的妹妹穿的比我還像新娘。我一直安慰自己粟害,他們只是感情好蕴忆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著悲幅,像睡著了一般套鹅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汰具,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天卓鹿,我揣著相機(jī)與錄音,去河邊找鬼留荔。 笑死吟孙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的聚蝶。 我是一名探鬼主播杰妓,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碘勉!你這毒婦竟也來(lái)了巷挥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤验靡,失蹤者是張志新(化名)和其女友劉穎倍宾,沒(méi)想到半個(gè)月后雏节,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡高职,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年矾屯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片初厚。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡件蚕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出产禾,到底是詐尸還是另有隱情排作,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布亚情,位于F島的核電站妄痪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏楞件。R本人自食惡果不足惜衫生,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望土浸。 院中可真熱鬧罪针,春花似錦、人聲如沸黄伊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)还最。三九已至墓阀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拓轻,已是汗流浹背斯撮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扶叉,地道東北人勿锅。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辜梳,于是被迫代替她去往敵國(guó)和親粱甫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泳叠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 初衷:看了很多視頻作瞄、文章,最后卻通通忘記了危纫,別人的知識(shí)依舊是別人的宗挥,自己卻什么都沒(méi)獲得乌庶。此系列文章旨在加深自己的印...
    DCbryant閱讀 3,993評(píng)論 0 20
  • JS正則表達(dá)式一條龍講解,從原理和語(yǔ)法到JS正則契耿、ES6正則擴(kuò)展瞒大,最后再到正則實(shí)踐思路 Stinson 關(guān)注 20...
    小杰的簡(jiǎn)書(shū)閱讀 655評(píng)論 0 2
  • 01.正則基本符號(hào) 1.什么是正則表達(dá)式 正則表達(dá)式就是字符匹配的工具;是由正則符號(hào)和普通字符組成,來(lái)匹配不同規(guī)律...
    Gary134閱讀 527評(píng)論 0 0
  • 1.正則基本符號(hào) 1.1.什么是正則表達(dá)式正則表達(dá)式就是字符匹配的工具搪桂;是由正則符號(hào)和普通字符組成透敌,來(lái)匹配不同規(guī)律...
    未醒的夢(mèng)_19b0閱讀 447評(píng)論 0 0
  • 正則表達(dá)式到底是什么東西?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位踢械,可能是字母酗电,數(shù)字,標(biāo)點(diǎn)符號(hào)内列,空格撵术,換行符,漢字等...
    獅子挽歌閱讀 2,141評(píng)論 0 9