<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          再見,Python正則表達(dá)式!

          共 3204字,需瀏覽 7分鐘

           ·

          2021-09-18 09:39

          點(diǎn)擊上方Python知識(shí)圈,設(shè)為星標(biāo)

          回復(fù)100獲取100題PDF

          閱讀文本大概需要 5 分鐘

          正則表達(dá)式是我們用于查找、匹配、替換中,很重要的一項(xiàng)技能,但是大多數(shù)人總是學(xué)不會(huì)。
          其實(shí)主要還是沒掌握方法,當(dāng)你真正掌握方法后,真的要說一句再見,Python正則表達(dá)式!今天,我們就嘗試用一篇文章,帶大家輕松入門Python正則表達(dá)式!

          re庫(kù)

          在Python中,re庫(kù)又叫做正則表達(dá)式庫(kù),也屬于Python標(biāo)準(zhǔn)庫(kù)之一,不用安裝就可以使用。

          什么是正則表達(dá)式?

          正則表達(dá)式是一組由字母和符號(hào)組成的特殊文本,可以幫助我們從某個(gè)復(fù)雜的字符串中,提取出滿足我們要求的特殊文本。
          用一個(gè)形象的比喻大致體會(huì)一下正則匹配的過程。蘋果相當(dāng)于寫的“正則表達(dá)式”,字符串相當(dāng)于“水果市場(chǎng)”,“正則匹配的過程”就相當(dāng)于拿著蘋果去“水果市場(chǎng)”找蘋果的過程,每找到一個(gè)就返回一個(gè),否則就什么也沒有。

          常用操作符介紹

          正則表達(dá)式之所以這么強(qiáng)大,是因?yàn)閾碛羞@么多專用操作符。為了方便大家記憶,我特意將操作符分為三類:
          • 第一,元字符;
          • 第二,量化符;
          • 第三,特殊符;

          1. 常用元字符

          所謂“元字符”,指的是那些不僅僅可以表示字符本身含義、并且還可以表示其他特殊含義的字符。
          常用的元字符有. [ ] () ^ $ | \ ? * + { }共11種,為了更清楚地說明每個(gè)元字符的含義,我這里整理了一張表格供大家參考。
          可以看到,上面一共說明了7種元字符的含義,還有4種并沒有說明。那是為了方便大家記憶,我特意將上述最后4個(gè)元字符分類到了“量化符”中,這個(gè)將在下面一小節(jié)中進(jìn)行講述。

          2. 常用量化符

          所謂“量化符”,指的就是將緊挨著量化符前面的那個(gè)字符,匹配0次、1次或者多次,詳細(xì)說明見下表。

          3. 常用特殊符

          所謂“特殊符”,指的就是由轉(zhuǎn)義字符加某些字母組合而成的具有特殊意義的特殊字符,詳細(xì)說明見下表。

          常用方法介紹

          在re庫(kù)中,一共提供了三個(gè)函數(shù)用于查找匹配,分別是match()、search()還有findall(),下面我們分別對(duì)他們進(jìn)行講述。

          1. 三大函數(shù)含義對(duì)比

          在這三個(gè)函數(shù)中,用的最多的是findall()這個(gè)函數(shù),其次是search()函數(shù),match()函數(shù)則用的很少。下面我們一一說明它的含義:
          • match(pattern,string):匹配字符串的開頭,如果開頭匹配不上,則返回None;
          • seach(pattern,string):掃描整個(gè)字符串,匹配后立即返回,不在往后面匹配;
          • findll(pattern,string):掃描整個(gè)字符串,以列表形式返回所有的匹配值;
          其中,pattern表示用于匹配的正則表達(dá)式,string表示待匹配的字符串。

          2. 三大函數(shù)用法對(duì)比

          前面我們已經(jīng)介紹了這三個(gè)函數(shù)的具體含義,現(xiàn)在用一個(gè)案例對(duì)比說明它們的不同之處。
          導(dǎo)入相關(guān)庫(kù)。
          import re
          如果有如下兩個(gè)字符串。
          s = "黃同學(xué)喜歡唱歌,黃同學(xué)喜歡寫作,黃同學(xué)喜歡吃火鍋!"
          s1 = "喜歡唱歌,喜歡寫作,喜歡吃火鍋"
          ① 使用match()函數(shù)
          首先我們使用直接匹配s字符串中的“喜歡”二字。
          re.match("喜歡",s)
          這行代碼沒有返回結(jié)果,表示返回結(jié)果是None值,那是由于match()只匹配開頭,如果開頭不是“喜歡”二字,那么就返回None。
          re.match("喜歡",s) == None
          返回結(jié)果是:True。
          如果我們?cè)偈褂胢atch()函數(shù),匹配s1字符串中的“喜歡”二字。
          re.match("喜歡",s1)
          返回結(jié)果是:<re.Match object; span=(0, 2), match='喜歡'>。
          上述結(jié)果得到的是一個(gè)匹配對(duì)象,如果我們想要獲取其中的匹配值,就必須調(diào)用匹配對(duì)象的group()方法,獲取具體的匹配值。
          re.match("喜歡",s1).group()
          返回結(jié)果是:’喜歡’
          ② 使用search()函數(shù)
          接著我們使用直接匹配s字符串中的“喜歡”二字。
          re.search("喜歡",s)
          返回結(jié)果是:<re.Match object; span=(3, 5), match='喜歡'>。
          上述結(jié)果同樣返回的是一個(gè)匹配對(duì)象,仍然需要調(diào)用group()方法,獲取到具體的匹配值。
          re.search("喜歡",s).group()
          返回結(jié)果是:'喜歡'
          ③ 使用finall()函數(shù)
          最后我們?cè)偈褂弥苯悠ヅ鋝字符串中的“喜歡”二字。
          re.findall("喜歡",s)
          返回結(jié)果是:['喜歡', '喜歡', '喜歡']

          3. 其他常用方法

          除了上述三個(gè)用于查找匹配的函數(shù)之外,還有用于切分的split()函數(shù),有用于替換的sub()函數(shù)。另外還有兩個(gè)常用修飾符re.I和re.S,簡(jiǎn)單了解一下。下面我們一一介紹它們的含義:
          • split(pattern,string):按照某個(gè)匹配的正則表達(dá)式,將整個(gè)字符串切分后,以列表返回;
          • sub(pattern,repl,string):按照某個(gè)匹配的正則表達(dá)式,將整個(gè)字符串的某個(gè)字串替換為另外一個(gè)字串;
          • re.I:讓正則表達(dá)式自動(dòng)忽略大小寫;
          • re.S:讓“.”能夠匹配包括換行符在內(nèi)的任意字符;
          其中,pattern表示用于匹配的正則表達(dá)式,string表示待匹配的字符串,repl表示替換后的字串。
          假如有這樣3個(gè)字符串:
          s = "趙1錢2孫4李8周16吳32鄭64王128黃"
          s1 = "Huang是huang"
          s2 = "黃\n同學(xué)"
          需求1:將字符串s按照數(shù)字切分,以一個(gè)漢字組成的列表返回。
          我們知道\d是匹配某一個(gè)數(shù)字,但是上述字符串里面,有2位的數(shù)字還有3位的數(shù)字,于是你會(huì)想到使用\d+表示匹配>=1個(gè)數(shù)字,因此整個(gè)代碼如下:
          re.split("\d+",s)
          返回結(jié)果是:['趙', '錢', '孫', '李', '周', '吳', '鄭', '王', '黃']。
          需求2:將字符串s中的數(shù)字部分,全都替換為空。
          同樣我們?nèi)匀挥肻d+表示匹配>=1個(gè)數(shù)字,這道題的代碼如下:
          re.sub("\d+"," ",s)
          返回結(jié)果是:'趙 錢 孫 李 周 吳 鄭 王 黃'
          需求3:將字符串s1中的h匹配出來,不區(qū)分大小寫;
          如果不加re.I,系統(tǒng)會(huì)將它們看待成不同的字符。
          re.findall("h",s1)
          返回結(jié)果是:['h']
          如果加了re.I,系統(tǒng)會(huì)忽略大小寫,那么h和H就是同一個(gè)字符。
          re.findall("h",s1,re.I)
          返回結(jié)果是:['H', 'h']
          需求4:將字符串s2整個(gè)匹配出來,包括換行符;
          如果不加re.S,“.”不能匹配“\n”換行符。
          re.findall(".+",s2)
          返回結(jié)果是:['黃', '同學(xué)']
          如果加了re.S,“.”此時(shí)能夠匹配“\n”換行符。
          re.findall(".+",s2,re.S)
          返回結(jié)果是:['黃\n同學(xué)']

          PS:我自己建了一個(gè)每天可領(lǐng)外賣優(yōu)惠券的號(hào),經(jīng)常領(lǐng)到15元的無門檻券不花冤枉錢~
          加微信送《Python知識(shí)點(diǎn)100題PDF》

          pk哥個(gè)人微信


          添加pk哥個(gè)人微信即送Python資料


          Python知識(shí)點(diǎn)100題的PDF

          Python相關(guān)的電子書10本


          記得備注:“100題”




          往期推薦
          01

          公眾號(hào)所有文章匯總導(dǎo)航(2-10更新)

          02

          永久白嫖!新發(fā)現(xiàn)的外賣漏洞??!請(qǐng)低調(diào)使用

          03

          求你了,別再用 pip 那烏龜?shù)乃俣热グ惭b庫(kù)了!

          我就知道你“在看”

          瀏覽 53
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  又粗又大操逼视频 | 污污久久| 午夜激情操一操 | 久操视频在线播放 | 九七成人网 |