亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Python其實很簡單 第十一章 正則表達式

                正則表達式是一個特殊的字符序列,它用來檢查一個字符串是否與某種模式匹配。正則表達式在編譯程序中至關(guān)重要,但并不是每個人都需要特別深入的學(xué)習(xí)和掌握。在此,只介紹一些最基本的應(yīng)用。

                1、元字符

                元字符是構(gòu)成正則表達式的一些特殊字符。在正則表達式中,元字符被賦予了新的含義。

                下面介紹一些常用的元字符及其含義:

                . 匹配除換行符以外的任意字符。

                w 匹配字母、數(shù)字、下劃線或漢字。

                W 匹配w所匹配的字符以外的字符。

                s 匹配單個空白符(包括Tab鍵和換行符)。

                S 匹配除s匹配的字符以外的字符。

                d 匹配數(shù)字。

                b 匹配單詞的分界符,如:空格、標(biāo)點符號或換行符。

                ^ 匹配字符串的開始

                $ 匹配字符串的結(jié)束

                2、限定符

                限定符是在正則表達式中用來指定數(shù)量的字符。常用的限定符有:

                ? 匹配前面的字符0或1次。如:zo?m可以匹配zom和zm,但不能匹配 zoom

                + 匹配前面的字符1或n次。如:zo?m可以匹配zom和zoom,但不能匹配zm

                * 匹配前面的字符0或n次。如:zo?m可以匹配zom、zoom和zm

                {n} 匹配前面的字符n次。如:zo{2}m可以匹配zoom,但不能匹配zom和zm

                {n,} 匹配前面的字符至少n次。如:zo{1,}m可以匹配zom和zoom,但不能匹配zm

                {n,m} 匹配前面的字符至少n次,最多m次。如:zo{1,2}m可以匹配zom和zoom,但不能匹配zm

                3、方括號”[ ]”的用途

                方括號“[ ]”里可以列出某個字符范圍。如:[aeiou]表示匹配任意一個元音字母,[zqsl]表示匹配姓氏“趙錢孫李”的拼音第一個字母。

                4、排除字符

                方括號”[ ]”中的“^”字符表示排除的意思,如:[^aeiou]表示匹配任意一個非元音字母的字符。

                5、選擇字符

                字符“|”相當(dāng)于“或”。如:(^d{3}[-]d{8})|(^d{4}[-]d{7})$可以匹配形如” – ”或“ – ”的電話號碼格式。

                6、轉(zhuǎn)義字符

                對于已經(jīng)用于定義元字符和限定符的字符,需要加轉(zhuǎn)義符“”來表示。

                如:為了匹配形如“192.168.0.1”的IPv4地址(1~255.0~255.0~255.0~255),可以用這樣的正則表達式:^(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$

                這里解釋一下第一段IP地址的規(guī)則,取值范圍為1~255,可分解為以下情況:

                250~255:25[0-5];

                200~249:2[0-4][0-9];

                100~199:[01]{1}[0-9]{2};

                0~99: [0-9]{1}[1-9]

                再加上”.”: .

                其他三段地址和第一段相似。

                7、“( )”可以用于分組

                在正則表達式中,用“( )”括起來的部分是一個整體。

                8、r(或R)的意義

                在正則表達式中,為了保證模式字符串為原生字符串(沒有經(jīng)過加工處理的字符串),可以在模式字符串前加上一個字符‘r’或‘R’。例如:

                # 這里用到對的re.match()方法接下來介紹

                >>> import re # 導(dǎo)入re模塊

                >>> re.match(‘bPy[a-z]+’,’Python’) # 表達式’bPy[a-z]+’不能匹配’Python’

                >>> re.match(‘bPy[a-z]+’,’Python’) # 表達式’bPy[a-z]+’可以匹配’Python’

                在上述代碼中,原本要用作匹配單詞開始或結(jié)束的元字符’b’在表達式中字符串中會被視為轉(zhuǎn)義一個字符‘b’,為了轉(zhuǎn)義’b’就不得不再加一個’’符號。

                也可以采用下面的方法:

                >>> re.match(r’bPy[a-z]+’,’Python’) #加字符’r’,可以保證原生字符串

                9、match()方法

                Match()方法 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match() 就返回 none。

                語法格式:

                re.match(pattern, string, [flags])

                其中,pattern表示匹配的正則表達式;string是要匹配的字符串;flags表示標(biāo)志位,用于控制正則表達式的匹配方式,如:re.I表示不區(qū)分大小寫。

                例:

                import re #導(dǎo)入re模塊

                print(re.match(‘www’, ‘www.python.org/’).span()) #span()函數(shù)可以獲取匹配的位置

                print(re.match(‘org’, ‘www.python.org’))

                輸出結(jié)果為:

                (0, 3) #在位置0到3(不包括3)匹配成功

                None #從起始位置未能匹配成功

                10、search()方法

                search()方法用于在整個字符串中搜索第一個匹配的值,如果匹配成功,則返回Match對象,否則返回None。

                語法格式:

                re.search(pattern, string, [flags])

                其中,pattern表示匹配的正則表達式;string是要匹配的字符串;flags表示標(biāo)志位,用于控制正則表達式的匹配方式,如:re.I表示不區(qū)分大小寫。

                例如:

                >>> re.search(r’Pyw+’,’It’s easy to use Python, but it’s not easy to learn Python.’)

                可以看出,目標(biāo)字符串“It’s easy to use Python, but it’s not easy to learn Python.”中一共有兩個‘Python’,search()方法可以從字符串的起始位置開始查找到‘Python’,當(dāng)找到第一個匹配值后就停止查找,返回位置信息。

                match()和search()的比較

                match()要求目標(biāo)字符串的起始位置就能匹配,search()對目標(biāo)字符串全段進行逐次匹配,只要首次匹配成功就停止匹配。

                請看下例:

                >>> import re

                >>> print(re.match(r’Pyw+’,’It’s easy to use Python, but it’s not easy to learn Python.’))

                輸出結(jié)果:None

                11、findall()方法

                findall()方法用于在整個字符串中搜索所有匹配的值,如果匹配成功,則返回以匹配值為元素的列表,否則返回空列表。

                語法格式:

                re.findall(pattern, string[, flags])

                其中,pattern表示匹配的正則表達式;string是要匹配的字符串;flags表示標(biāo)志位,用于控制正則表達式的匹配方式,如:re.I表示不區(qū)分大小寫。

                例:

                >>> import re

                >>>print(re.findall(r’Pyw+’,’It’s easy to use Python, but it’s not easy to learn Python.’))

                輸出結(jié)果:[‘Python’, ‘Python’]

                可以看出,findall()的結(jié)果沒有指出匹配的具體位置。

                12、正則表達式的應(yīng)用

                字符串替換

                這里要用到sub()方法。它的語法格式如下:

                re.sub(pattern, repl, string [,count] [,flgs])

                其中,pattern是模式字符串;repl是用于替換的字符串;string是原字符串;可選參數(shù)count為模式匹配后替換的最大次數(shù),省缺表示替換所有的匹配;可選參數(shù)flags的意義與前面的方法的該參數(shù)一致。

                例:

                >>> import re

                >>> str1=’x=36.567 y=123.234′

                >>> str2=re.sub(‘.d+’,”,str1) #用空格代替小數(shù)點及其后的數(shù)字

                >>> print(str2)

                輸出結(jié)果:x=36 y=123

                分隔字符串

                這里要用到split()方法。它的返回值為一個列表,它的語法格式如下:

                re.split(pattern, string [,maxsplit] [,flgs])

                其中,pattern是模式字符串;string是原字符串;可選參數(shù)maxsplit為最大拆分次數(shù),省缺表示拆分所有的匹配;可選參數(shù)flags的意義與前面的方法的該參數(shù)一致。

                例:

                >>> import re

                >>> str=’白日依山盡,黃河入海流。欲窮千里目,更上一層樓!’

                >>> re.split(r’,|。|!’,str) #按照“,”、“?!薄ⅰ?!”分隔字符串。

                [‘白日依山盡’, ‘黃河入海流’, ‘欲窮千里目’, ‘更上一層樓’, ”]

                注意,返回值列表中多出了一個空字符。

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月30日 20:09
                下一篇 2022年6月30日 20:09

                相關(guān)推薦

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息