最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python的re模塊正則表達(dá)式操作

 更新時(shí)間:2016年05月25日 09:11:39   作者:jerrylsxu  
這篇文章主要介紹了Python的re模塊正則表達(dá)式操作 的相關(guān)資料,需要的朋友可以參考下

這個(gè)模塊提供了與 Perl 相似l的正則表達(dá)式匹配操作。Unicode字符串也同樣適用。

正則表達(dá)式使用反斜杠" \ "來(lái)代表特殊形式或用作轉(zhuǎn)義字符,這里跟Python的語(yǔ)法沖突,因此,Python用" \\\\ "表示正則表達(dá)式中的" \ ",因?yàn)檎齽t表達(dá)式中如果要匹配" \ ",需要用\來(lái)轉(zhuǎn)義,變成" \\ ",而Python語(yǔ)法中又需要對(duì)字符串中每一個(gè)\進(jìn)行轉(zhuǎn)義,所以就變成了" \\\\ "。

上面的寫法是不是覺得很麻煩,為了使正則表達(dá)式具有更好的可讀性,Python特別設(shè)計(jì)了原始字符串(raw string),需要提醒你的是,在寫文件路徑的時(shí)候就不要使用raw string了,這里存在陷阱。raw string就是用'r'作為字符串的前綴,如 r"\n":表示兩個(gè)字符"\"和"n",而不是換行符了。Python中寫正則表達(dá)式時(shí)推薦使用這種形式。

絕大多數(shù)正則表達(dá)式操作與 模塊級(jí)函數(shù)或RegexObject方法 一樣都能達(dá)到同樣的目的。而且不需要你一開始就編譯正則表達(dá)式對(duì)象,但是不能使用一些實(shí)用的微調(diào)參數(shù)。

1.正則表達(dá)式語(yǔ)法

為了節(jié)省篇幅,這里不再敘述了。

2.martch和search的區(qū)別

Python提供了兩種不同的原始操作:match和search。match是從字符串的起點(diǎn)開始做匹配,而search(perl默認(rèn))是從字符串做任意匹配。

注意:當(dāng)正則表達(dá)式是' ^ '開頭時(shí),match與search是相同的。match只有當(dāng)且僅當(dāng)被匹配的字符串開頭就能匹配 或 從pos參數(shù)的位置開始就能匹配 時(shí)才會(huì)成功。如下:

>>> import re
>>> re.match("c", "abcdef")
>>> re.search("c","abcdef")
<_sre.SRE_Match object at 0x00A9A988>
>>> re.match("c", "cabcdef")
<_sre.SRE_Match object at 0x00A9AB80>
>>> re.search("c","cabcdef")
<_sre.SRE_Match object at 0x00AF1720>
>>> patterm = re.compile("c")
>>> patterm.match("abcdef")
>>> patterm.match("abcdef",1)
>>> patterm.match("abcdef",2)
<_sre.SRE_Match object at 0x00A9AB80>

3.模塊內(nèi)容

re.compile(pattern, flags=0)

編譯正則表達(dá)式,返回RegexObject對(duì)象,然后可以通過RegexObject對(duì)象調(diào)用match()和search()方法。

prog = re.compile(pattern)
result = prog.match(string)


result = re.match(pattern, string)

是等價(jià)的。

第一種方式能實(shí)現(xiàn)正則表達(dá)式的重用。

re.search(pattern, string, flags=0)

在字符串中查找,是否能匹配正則表達(dá)式。返回_sre.SRE_Match對(duì)象,如果不能匹配返回None。

re.match(pattern, string, flags=0)

字符串的開頭是否能匹配正則表達(dá)式。返回_sre.SRE_Match對(duì)象,如果不能匹配返回None。

re.split(pattern, string, maxsplit=0)

通過正則表達(dá)式將字符串分離。如果用括號(hào)將正則表達(dá)式括起來(lái),那么匹配的字符串也會(huì)被列入到list中返回。maxsplit是分離的次數(shù),maxsplit=1分離一次,默認(rèn)為0,不限制次數(shù)。

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)

注意:我使用的Python是2.6,查看源代碼發(fā)現(xiàn)split()并沒有flags的參數(shù),2.7才增加。這種問題我發(fā)現(xiàn)不止一次了,官方的文檔 跟 源碼不一致的現(xiàn)象,如果發(fā)現(xiàn)異常,應(yīng)該去源碼中找找原因。

如果在字符串的開始或結(jié)尾就匹配,返回的list將會(huì)以空串開始或結(jié)尾。

>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']

如果字符串不能匹配,將會(huì)返回整個(gè)字符串的list。

>>> re.split("a","bbb")
['bbb']

re.findall(pattern, string, flags=0)

找到 RE 匹配的所有子串,并把它們作為一個(gè)列表返回。這個(gè)匹配是從左到右有序地返回。如果無(wú)匹配,返回空列表。

>>> re.findall("a","bcdef")
[]

>>> re.findall(r"\d+","12a32bc43jf3")
['12', '32', '43', '3']

re.finditer(pattern, string, flags=0)

找到 RE 匹配的所有子串,并把它們作為一個(gè)迭代器返回。這個(gè)匹配是從左到右有序地返回。如果無(wú)匹配,返回空列表。

>>> it = re.finditer(r"\d+","12a32bc43jf3")
>>> for match in it:
print match.group()

re.sub(pattern, repl, string, count=0, flags=0)

找到 RE 匹配的所有子串,并將其用一個(gè)不同的字符串替換。可選參數(shù) count 是模式匹配後替換的最大次數(shù);count 必須是非負(fù)整數(shù)。缺省值是 0 表示替換所有的匹配。如果無(wú)匹配,字符串將會(huì)無(wú)改變地返回。

re.subn(pattern, repl, string, count=0, flags=0)

與re.sub方法作用一樣,但返回的是包含新字符串和替換執(zhí)行次數(shù)的兩元組。

re.escape(string)

對(duì)字符串中的非字母數(shù)字進(jìn)行轉(zhuǎn)義

re.purge()

清空緩存中的正則表達(dá)式

4.正則表達(dá)式對(duì)象

re.RegexObject

re.compile()返回RegexObject對(duì)象

re.MatchObject

group()返回被 RE 匹配的字符串

start()返回匹配開始的位置

end()返回匹配結(jié)束的位置

span()返回一個(gè)元組包含匹配 (開始,結(jié)束) 的位置

5.編譯標(biāo)志

編譯標(biāo)志讓你可以修改正則表達(dá)式的一些運(yùn)行方式。在 re 模塊中標(biāo)志可以使用兩個(gè)名字,一個(gè)是全名如 IGNORECASE,一個(gè)是縮寫,一字母形式如 I。(如果你熟悉 Perl 的模式修改,一字母形式使用同樣的字母;例如 re.VERBOSE的縮寫形式是 re.X。)多個(gè)標(biāo)志可以通過按位 OR-ing 它們來(lái)指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志:

I
IGNORECASE

使匹配對(duì)大小寫不敏感;字符類和字符串匹配字母時(shí)忽略大小寫。舉個(gè)例子,[A-Z]也可以匹配小寫字母,Spam 可以匹配 "Spam", "spam", 或 "spAM"。這個(gè)小寫字母并不考慮當(dāng)前位置。

L
LOCALE

影響 "w, "W, "b, 和 "B,這取決于當(dāng)前的本地化設(shè)置。

locales 是 C 語(yǔ)言庫(kù)中的一項(xiàng)功能,是用來(lái)為需要考慮不同語(yǔ)言的編程提供幫助的。舉個(gè)例子,如果你正在處理法文文本,你想用 "w+ 來(lái)匹配文字,但 "w 只匹配字符類 [A-Za-z];它并不能匹配 "é" 或 "?"。如果你的系統(tǒng)配置適當(dāng)且本地化設(shè)置為法語(yǔ),那么內(nèi)部的 C 函數(shù)將告訴程序 "é" 也應(yīng)該被認(rèn)為是一個(gè)字母。當(dāng)在編譯正則表達(dá)式時(shí)使用 LOCALE 標(biāo)志會(huì)得到用這些 C 函數(shù)來(lái)處理 "w 後的編譯對(duì)象;這會(huì)更慢,但也會(huì)象你希望的那樣可以用 "w+ 來(lái)匹配法文文本。

M
MULTILINE

(此時(shí) ^ 和 $ 不會(huì)被解釋; 它們將在 4.1 節(jié)被介紹.)

使用 "^" 只匹配字符串的開始,而 $ 則只匹配字符串的結(jié)尾和直接在換行前(如果有的話)的字符串結(jié)尾。當(dāng)本標(biāo)志指定後, "^" 匹配字符串的開始和字符串中每行的開始。同樣的, $ 元字符匹配字符串結(jié)尾和字符串中每行的結(jié)尾(直接在每個(gè)換行之前)。

S
DOTALL

使 "." 特殊字符完全匹配任何字符,包括換行;沒有這個(gè)標(biāo)志, "." 匹配除了換行外的任何字符。

X
VERBOSE

該標(biāo)志通過給予你更靈活的格式以便你將正則表達(dá)式寫得更易于理解。當(dāng)該標(biāo)志被指定時(shí),在 RE 字符串中的空白符被忽略,除非該空白符在字符類中或在反斜杠之後;這可以讓你更清晰地組織和縮進(jìn) RE。它也可以允許你將注釋寫入 RE,這些注釋會(huì)被引擎忽略;注釋用 "#"號(hào) 來(lái)標(biāo)識(shí),不過該符號(hào)不能在字符串或反斜杠之後。

最后:如果能用字符串的方法,就不要選擇正則表達(dá)式,因?yàn)樽址椒ǜ?jiǎn)單快速。

相關(guān)文章

  • Python3-異步進(jìn)程回調(diào)函數(shù)(callback())介紹

    Python3-異步進(jìn)程回調(diào)函數(shù)(callback())介紹

    這篇文章主要介紹了Python3-異步進(jìn)程回調(diào)函數(shù)(callback())介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-05-05
  • Python繪制趨勢(shì)線的示例代碼

    Python繪制趨勢(shì)線的示例代碼

    趨勢(shì)線是用來(lái)顯示數(shù)據(jù)趨勢(shì)或者預(yù)測(cè)未來(lái)發(fā)展方向的一種圖形表示方法,這篇文章主要為大家詳細(xì)介紹了如何使用Python繪制趨勢(shì)線,需要的可以了解下
    2024-03-03
  • 一則python3的簡(jiǎn)單爬蟲代碼

    一則python3的簡(jiǎn)單爬蟲代碼

    最近一直在學(xué)習(xí)Python,還有網(wǎng)絡(luò)爬蟲,于是就想起來(lái)把2者結(jié)合一下,所以就有了本文。
    2014-05-05
  • Python打包成exe的兩種方法

    Python打包成exe的兩種方法

    python的開發(fā)效率非常的高,但是當(dāng)我們用python寫一些小工具需要給用戶使用的時(shí)候,用戶大多數(shù)是沒有安裝python的,本文介紹兩種python的打包方案,使用pyinstaller和nuitka打包成exe,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • pycharm遠(yuǎn)程調(diào)試openstack的圖文教程

    pycharm遠(yuǎn)程調(diào)試openstack的圖文教程

    這篇文章主要為大家詳細(xì)介紹了pycharm遠(yuǎn)程調(diào)試openstack的圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python?中的反轉(zhuǎn)字符串reversed(),切片

    Python?中的反轉(zhuǎn)字符串reversed(),切片

    這篇文章主要介紹了Python?中的反轉(zhuǎn)字符串reversed(),切片?,以相反的順序反轉(zhuǎn)和處理字符串可能是編程中的一項(xiàng)常見任務(wù)。Python?提供了一組工具和技術(shù),可以幫助我們快速有效地執(zhí)行字符串反轉(zhuǎn),下面來(lái)看看具體內(nèi)容吧
    2021-12-12
  • python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼(批轉(zhuǎn)換編碼示例)

    python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼(批轉(zhuǎn)換編碼示例)

    這篇文章主要介紹了python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼示例,指定文件編碼、目錄或擴(kuò)展名即可進(jìn)行轉(zhuǎn)換,大家參考使用吧
    2014-01-01
  • 解決使用openpyxl時(shí)遇到的坑

    解決使用openpyxl時(shí)遇到的坑

    這篇文章主要介紹了解決使用openpyxl時(shí)遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-03-03
  • 實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例

    實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例

    在本篇文章里小編給大家整理的是一篇關(guān)于實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的3種算法實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-09-09
  • Python 普通最小二乘法(OLS)進(jìn)行多項(xiàng)式擬合的方法

    Python 普通最小二乘法(OLS)進(jìn)行多項(xiàng)式擬合的方法

    今天小編就為大家分享一篇Python 普通最小二乘法(OLS)進(jìn)行多項(xiàng)式擬合的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-12-12

最新評(píng)論

长治市| 小金县| 鹤峰县| 顺平县| 永登县| 桂林市| 桂林市| 肥城市| 肥城市| 阿鲁科尔沁旗| 萍乡市| 开平市| 文登市| 和政县| 正安县| 微山县| 个旧市| 留坝县| 岱山县| 商洛市| 贵德县| 龙里县| 葫芦岛市| 大新县| 琼结县| 固阳县| 内黄县| 平利县| 四川省| 宁南县| 绥德县| 漳州市| 沅陵县| 古丈县| 读书| 鸡西市| 依安县| 宝清县| 遂宁市| 图们市| 芦溪县|