日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

第11.25节 Python正则表达式编译re.compile及正则对象使用

發布時間:2023/12/20 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第11.25节 Python正则表达式编译re.compile及正则对象使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 引言
在《第11.2節 Python 正則表達式支持函數概覽》介紹了re模塊的主要函數,在《第11.3節 Python正則表達式搜索支持函數search、match、fullmatch、findall、finditer》重點介紹了幾個搜索函數。這些介紹的搜索函數都是直接使用正則表達式去匹配搜索文本,實際上re模塊還支持將正則表達式先編譯再搜索匹配,這種先編譯后搜索在同一個正則表達式多次去執行匹配時可以提高匹配執行效率。

二、 re.compile函數

  • 語法:compile(pattern, flags=0)
  • 語法釋義:
    pattern是要匹配的正則表達式,flags是在《第11.2節 Python 正則表達式支持函數概覽》介紹的搜索標記。
  • 返回結果:
    返回結果是一個類型為re.Pattern的對象,該對象稱為 “正則表達式對象”或“正則對象”。該對象可以直接使用自己的方法search、match等進行搜索和匹配。
  • 三、 正則對象Pattern的屬性

  • Pattern.flags:正則匹配標記。這是可以傳遞給 compile() 的參數,任何 (?…) 內聯標記,隱性標記比如 UNICODE 的結合。不過這里的值是一個數字,而不是使用標記的常量,數字與匹配標記常量對應關系請參考《第11.2節 Python 正則表達式支持函數概覽》;
  • Pattern.groups:捕獲組合的數量;
  • Pattern.groupindex:在命名組內記錄組名和組序號的映射關系。如果沒有命名組,那字典就是空的。
  • Pattern.pattern:編譯對象的對應的正則表達式。
  • 四、 正則對象的方法

  • Pattern.search(string[, pos[, endpos]])
    這個方法與re.search函數功能類似,掃描整個 string 尋找第一個匹配位置, 并返回一個相應匹配對象。如果沒有匹配,就返回 None。不過比re.search函數多了兩個可選參數,可選的第二個參數 pos 給出了字符串中開始搜索的位置索引,默認為 0,如果大于0,對于元字符 ‘^’ 和特殊序列\A樣式字符匹配字符串真正的開頭,或換行符后面的第一個字符,但不會匹配索引規定開始的位置。
    可選參數 endpos 限定了字符串搜索的結束;當endpos比搜索文本長度小的時候,字符串末尾的匹配如’$’會匹配到endpos對應位置,也就是實際搜索文本變成了原搜索文本從開始到endpos位置切片對應的新搜索文本。
  • 案例:

    >>> str='Learning Python with LaoYuan123' >>> str[22:29] 'LaoYuan' >>> patstr='LaoYuan$' >>> pat=re.compile(patstr) >>> pat.search(str,endpos=29) <re.Match object; span=(22, 29), match='LaoYuan'> >>>

    上述案例中搜索文本結尾是123,但指定了結束位置剛好到搜索模式串,因此$最終匹配成功。

  • Pattern.match(string[, pos[, endpos]])
    該方法與re.match相對應,功能相差不多,從 string 的 開始位置 能夠找到這個正則樣式的任意個匹配,就返回一個相應的 匹配對象。如果不匹配,就返回 None 。可選參數 pos 和 endpos 與 search() 含義相同。
    如:
  • >>> patstr='Python' >>> str='LaoYuanPython' >>> pat=re.compile(patstr) >>> pat.match(str,7) <re.Match object; span=(7, 13), match='Python'> >>>
  • Pattern.fullmatch(string[, pos[, endpos]])
    該方法與re.fullmatch()函數相對應,如果整個 string 匹配這個正則表達式,就返回一個相應的 匹配對象 。 否則就返回 None。可選參數 pos 和 endpos 與 Pattern.search() 含義相同。
    案例:
  • >>> pat=re.compile(r"第[一-十][章回](.)*") >>> pat.fullmatch('第二回 悟徹菩提真妙理 斷魔歸本合元 ') <re.Match object; span=(0, 19), match='第二回 悟徹菩提真妙理\u3000斷魔歸本合元 '> >>>
  • Pattern.split(string, maxsplit=0)
    等價于 re.split 函數,只是使用了編譯后的正則對象來調用。
    案例:
  • >>> pat=re.compile(r'(\W+)') >>> pat.split('Hello,world') ['Hello', ',', 'world'] >>>
  • Pattern.findall(string[, pos[, endpos]])
    類似函數 re.findall函數,只是使用了正則對象來調用,比re.findall多了兩個可選參數 pos 和 endpos用于限制搜索范圍,這兩個參數的作用與Pattern.search方法的這兩個參數一樣。
    案例:
  • >>> pat=re.compile(r'(\w+)') >>> pat.findall('Learning python with LaoYuan') ['Learning', 'python', 'with', 'LaoYuan'] >>>
  • Pattern.finditer(string[, pos[, endpos]])
    類似函數re.finiter() , 使用了編譯后的正則對象來調用,比re.finiter()多了兩個可選參數 pos 和 endpos用于限制搜索范圍,這兩個參數的作用與Pattern.search方法的這兩個參數一樣。
    案例:
  • >>> pat=re.compile(r"第[一-十][章回]") >>> for i in pat.finditer("第一回靈根育孕源流出 心性修持大道生 第二回悟徹菩提真妙理 斷魔歸本合元神"):print(i)<re.Match object; span=(0, 3), match='第一回'> <re.Match object; span=(19, 22), match='第二回'> >>>
  • Pattern.sub(repl, string, count=0)
    等價于 re.sub函數,使用了編譯后的正則對象來調用。
    案例:
  • >>> patstr=r'(?i)(python)' >>> pat=re.compile(patstr) >>> pat.sub(r'\1->\g<1>->Python','Learning python with LaoYuan,LaoYuanPython accompanies you to progress') 'Learning python->python->Python with LaoYuan,LaoYuanPython->Python->Python accompanies you to progress' >>>
  • Pattern.subn(repl, string, count=0)
    等價于 re.subn() 函數,使用了編譯后的正則對象來調用。
  • >>> pat.subn(r'\1->\g<1>->Python','Learning python with LaoYuan,LaoYuanPython accompanies you to progress') ('Learning python->python->Python with LaoYuan,LaoYuanPython->Python->Python accompanies you to progress', 2) >>>

    老猿Python,跟老猿學Python!
    博客地址:https://blog.csdn.net/LaoYuanPython
    請大家多多支持,點贊、評論和加關注!謝謝!

    總結

    以上是生活随笔為你收集整理的第11.25节 Python正则表达式编译re.compile及正则对象使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。