Python 內置模塊之 re 庫,一文搞定正則表達式初階用法,滾雪球學 Python 第 13 篇

      網友投稿 923 2022-05-30

      橡皮擦,一個逗趣的互聯網高級網蟲。新的系列,讓我們一起 Be More Pythonic。

      十三、Python 內置模塊之 re 庫,一文搞定正則表達式初階用法

      13.1 re 庫的應用

      re 庫是 Python 中處理正則表達式的標準庫,本篇博客介紹 re 庫的同時,會簡單介紹一下正則表達式語法,如果想深入學習正則表達式,還需要好好下一番功夫。

      13.1.1 正則表達式語法

      正則表達式語法由字符和操作符構成,初期階段掌握下述這些內容即可。

      以上表示僅僅為正則表達最基礎部分內容,如果希望深入研究正則表達式,建議尋找更加全面的資料進行學習,本文只做藥引。

      13.1.2 re 庫基本用法

      re 庫主要函數如下:

      基礎函數:compile;

      功能函數:search、match、findall、split、finditer、sub。

      在正式學習之前,先了解一下原生字符串。

      在 Python 中,表示原生字符串,需要在字符串前面加上 r。

      例如 my_str = 'i'am xiangpica' 在程序中會直接報錯,如果希望字符串中 ' 可以正常運行,需要加上轉移字符 \,修改為 my_str = 'i\'am xiangpica'。

      但這樣結合上文正則表達式中的操作符,就會出現問題,因為 \ 在正則表達式中是有真實含義的,如果你使用 re 庫去匹配字符串中的 \,那需要使用 4 個反斜杠,為了避免這種情況出現,引入了原生字符串概念。

      # 不使用原生字符串的正則表達式 "\\" # 使用原生字符串的正則表達式 r"\"

      在后文會有實際的應用。

      接下來在學習一個案例,例如下述代碼:

      my_str='C:\number' print(my_str)

      C: umber

      本段代碼的輸出效果如下,\n 被解析成了換行,如果想要屏蔽這種現象,使用 r 即可:

      my_str=r'C:\number' print(my_str)

      Python 內置模塊之 re 庫,一文搞定正則表達式初階用法,滾雪球學 Python 第 13 篇

      輸出 C:\number。

      13.2 re 庫相關函數說明

      13.2.1 re.search 函數

      該函數用于,在字符串中搜索正則表達式匹配到的第一個位置的值,返回 match 對象。

      函數原型如下:

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

      需求:在字符串 夢想橡皮擦 good good 中匹配 橡皮擦。

      import re my_str='夢想橡皮擦 good good' pattern = r'橡皮擦' ret = re.search(pattern,my_str) print(ret)

      返回結果:

      search 函數的第三個參數 flags 表示正則表達式使用時的控制標記。

      re.I,re.IGNORECASE:忽略正則表達式的大小寫;

      re.M,re.MULTILINE:正則表達式中的 ^ 操作符能夠將給定字符串的每行當做匹配的開始;

      re.S,re.DOTALL:正則表達式中的 . 操作符能夠匹配所有字符。

      最后將匹配到的字符串進行輸出,使用下述代碼即可實現。

      import re my_str = '夢想橡皮擦 good good' pattern = r'橡皮擦' ret = re.search(pattern, my_str) if ret: print(ret.group(0))

      13.2.2 re.match 函數

      該函數用于在目標字符串開始位置去匹配正則表達式,返回 match 對象,未匹配成功返回 None,函數原型如下:

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

      一定要注意是目標字符串開始位置。

      import re my_str = '夢想橡皮擦 good good' pattern = r'夢' # 匹配到數據 pattern = r'good' # 匹配不到數據 ret = re.match(pattern, my_str) if ret: print(ret.group(0))

      re.match 和 re.search 方法都是一次最多返回一個匹配對象,如果希望返回多個值,可以通過在 pattern 里加括號構造匹配組返回多個字符串。

      13.2.3 re.findall 函數

      該函數用于搜索字符串,以列表格式返回全部匹配到的字符串,函數原型如下:

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

      測試代碼如下:

      import re my_str = '夢想橡皮擦 good good' pattern = r'good' ret = re.findall(pattern, my_str) print(ret)

      13.2.4 re.split 函數

      該函數將一個字符串按照正則表達式匹配結果進行分割,返回一個列表。

      函數原型如下:

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

      re.split 函數進行分割的時候,如果正則表達式匹配到的字符恰好在字符串開頭或者結尾,返回分割后的字符串列表首尾都多了空格,需要手動去除,例如下述代碼:

      import re my_str = '1夢想橡皮擦1good1good1' pattern = r'\d' ret = re.split(pattern, my_str) print(ret)

      運行結果:

      ['', '夢想橡皮擦', 'good', 'good', '']

      切換為中間的內容,則能正確的分割字符串。

      import re my_str = '1夢想橡皮擦1good1good1' pattern = r'good' ret = re.split(pattern, my_str) print(ret)

      如果在 pattern 中捕獲到括號,那括號中匹配到的結果也會在返回的列表中。

      import re my_str = '1夢想橡皮擦1good1good1' pattern = r'(good)' ret = re.split(pattern, my_str) print(ret)

      運行結果,你可以對比帶括號和不帶括號的區別進行學習:

      ['1夢想橡皮擦1', 'good', '1', 'good', '1']

      maxsplit 參數表示最多進行分割次數, 剩下的字符全部返回到列表的最后一個元素,例如設置匹配 1 次,得到的結果是 ['1夢想橡皮擦1', '1good1']。

      13.2.5 re.finditer 函數

      搜索字符串,并返回一個匹配結果的迭代器,每個迭代元素都是 match 對象。函數原型如下:

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

      測試代碼如下:

      import re my_str = '1夢想橡皮擦1good1good1' pattern = r'good' # ret = re.split(pattern, my_str,maxsplit=1) ret =re.finditer(pattern, my_str) print(ret)

      13.2.6 re.sub 函數

      在一個字符串中替換被正則表達式匹配到的字符串,返回替換后的字符串,函數原型如下:

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

      其中 repl 參數是替換匹配字符串的字符串,count 參數是匹配的最大替換次數。

      import re my_str = '1夢想橡皮擦1good1good1' pattern = r'good' ret = re.sub(pattern, "nice", my_str) print(ret)

      運行之后,得到替換之后的字符串:

      1夢想橡皮擦1nice1nice1

      13.2.7 re 庫其它函數

      其它比較常見的函數有:re.fullmatch(),re.subn(),re.escape(),更多內容可以查閱 官方文檔,獲取一手資料。

      13.3 re 庫的面向對象寫法

      上文都是函數式寫法,re 庫可以采用面向對象的寫法,將正則表達式進行編譯之后,多次操作。核心用到的函數是 re.compile。

      該函數原型如下:

      regex = re.compile(pattern,flags=0)

      其中 pattern 是正則表達式字符串或者原生字符串。

      測試代碼如下:

      import re my_str = '1夢想橡皮擦1good1good1' # 正則對象 regex = re.compile(pattern = r'good') ret = regex.sub("nice", my_str) print(ret)

      上述代碼將正則表達式編譯為一個正則對象,后面在 regex.sub 函數中就不需要在寫正則表達式了,使用時,只需要將編譯好的 regex 對象替換所有的 re 對象,再去調用對應的方法。

      13.4 re 庫的 match 對象

      使用 re 庫匹配字符串之后,會返回 match 對象,該對象具備以下屬性和方法。

      13.4.1 match 對象的屬性

      .string:待匹配的文本;

      .re:匹配時使用的 pattern 對象;

      .pos:正則表達式搜索文本的開始位置;

      .endpos:正則表達式搜索文本的結束位置。

      測試代碼如下:

      import re my_str = '1夢想橡皮擦1good1good1' regex = re.compile(pattern = r'g\w+d') ret = regex.search(my_str) print(ret) print(ret.string) print(ret.re) print(ret.pos) print(ret.endpos)

      結果輸出:

      1夢想橡皮擦1good1good1 re.compile('g\\w+d') 0 17

      13.4.2 match 對象的方法

      .group(0):獲取匹配后的字符串;

      .start():匹配字符串在原始字符串的開始位置;

      .end():匹配字符串在原始字符串的結尾位置;

      .span():返回(.start(),.end())

      因為內容比較簡單,具體代碼不再展示。

      13.5 這篇博客的總結

      本篇博客學習了 Python 中 re 庫的知識點,重點在 re 庫中的各個函數,對正則表達式未做過多說明,希望對你有所幫助。

      博主 ID:夢想橡皮擦,希望大家

      評論

      Python 正則表達式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel表格如何使用自動套入格式批量修改數據
      下一篇:SpringBoot配置文件的分水嶺——高級配置的使用
      相關文章
      亚洲国产中文在线视频| 亚洲女子高潮不断爆白浆| 国产精品亚洲专区无码唯爱网| 亚洲综合色丁香麻豆| 久久精品国产亚洲77777| 亚洲卡一卡2卡三卡4卡无卡三| 国产精品亚洲片在线观看不卡| 国产AV无码专区亚洲AV漫画| 国产午夜亚洲精品理论片不卡| 国产精品亚洲美女久久久| 亚洲AV伊人久久青青草原| 亚洲国产精品尤物yw在线| 亚洲欧洲日本在线| 国产亚洲精品AA片在线观看不加载| 亚洲高清无码专区视频| 亚洲午夜福利精品无码| 亚洲国产午夜中文字幕精品黄网站 | 亚洲综合一区无码精品| 亚洲熟妇AV一区二区三区宅男| 亚洲人成网站在线播放2019| 亚洲AV无码片一区二区三区| 国产91成人精品亚洲精品| 亚洲精品成人片在线观看| 亚洲日韩精品一区二区三区无码 | 亚洲无吗在线视频| 亚洲欧洲AV无码专区| 在线观看亚洲免费| 国产亚洲情侣一区二区无码AV| 亚洲日韩精品射精日| 亚洲天堂中文字幕| 91嫩草亚洲精品| 亚洲人成未满十八禁网站| 最新亚洲人成无码网www电影| 亚洲精品tv久久久久| 亚洲午夜日韩高清一区| 亚洲AV永久无码区成人网站| 亚洲美女精品视频| 亚洲欧美黑人猛交群| 亚洲七七久久精品中文国产| 亚洲国产精品VA在线观看麻豆| 亚洲成综合人影院在院播放|