學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是《python基礎教程(第二版)》,這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,之後的學習看個人了。
首先先了解正規表示式的定義:就是匹配文字片段的模式。
學習正規表示式必須要了解幾個名詞:萬用字元,特殊轉移字元,字符集,選擇符,重複子模式。
萬用字元:.號就是萬用字元,因為.可以匹配文字中任意乙個除換行符之外的字元,但是乙個點號只能匹配乙個字元。像'.ython'可以匹配像『python』,'jython','lython'這樣的字串。
字符集:用於匹配字符集當中包括的字元,使用中括號括住字串來建立字符集。'[abc]'這樣的正規表示式,其中[abc]就是字符集。它可以匹配'a','b','c'且只能匹配這三種字串。也可以使用範圍了表示字符集,例如'[a-f]'表示的就是匹配a到f中的任意乙個字母。當乙個字符集有多個範圍的時候,可以講這幾個範圍連續寫,如:'[a-f0-9]'這就表示匹配a到f或者0到9中的字元。字符集還可以反轉,在開頭使用^,』[^abc]『表示的就是匹配除了a,b,c,之外的任意乙個字元。乙個字符集只能對應匹配乙個字元。
特殊轉義字元:先看一下,如果想要匹配乙個**,使用』***.***x.***『類似的正規表示式肯定是不可以的,因為點號是萬用字元,它會匹配任意的乙個處理換行符之外的字元,如果想要匹配乙個點號,那麼就需要對正規表示式中的點號進行轉義,在之前加兩個\,為什麼要兩個\呢。因為\在re模組中也是特殊字元,獲取到\需要對\進行乙個轉義,所以要進行兩次轉義才能獲得點號。還有一種更方便直觀一點的方法就是使用python中的原始字串,r'***\.***x\.***'這樣就更方便一點。
在字串的每個字元都各不相同的情況下,字符集是很好用的,但是如果只想匹配字串,那樣就不能使用字符集或者萬用字元來匹配了。那就要用到用於選擇項的特殊字元,管道符 | 。如果想匹配字串'python'和'perl'那樣就可以將模式寫成『python|perl』。
子模式:有些時候不需要對整個模式使用選擇運算子,可以將需要使用選擇運算子的部分用圓括號括起,被括住的部分被稱為子模式。
可選項:子模式後面加上問號就變成了可選項,說明這一部分可以出現在匹配的字串中,也可以不出現。
重複子模式:設定子模式出現的次數
(pattern)*:允許模式重複0次或多次
(pattern)+:允許模式重複1次或多次
(pattern):允許模式出現[m,n]次
(pattern):模式出現m次
(pattern):允許模式出現不少於m次
字串的開始和結尾:
如果想模式匹配的字串是在匹配的字串的開始,使用脫字元^標記開始,想模式匹配的字串是在匹配的字串的結尾,使用美元符號$標記結尾。
然後是python的re模組中一些比較重要的函式:
compile(pattern[,flag])根據包含的正規表示式的字串建立模式物件,引數中傳入乙個正規表示式的字串,compile()函式會將這個字串轉換為乙個模式物件(regexobject)。因為在呼叫模組函式的時候,如果傳入表示式字串最終都會轉換為乙個模式物件,所以對於程式頻繁使用的表示式,最好使用compile()編譯一下,可以提高效率。
在字串中尋找模式。在給定的字串中尋找到第乙個匹配的子字串之後就返回乙個matchobject物件,其值為true,若果沒有找到的話,返回乙個none,其值為false.
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...
Python 正規表示式
1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...
python 正規表示式
正規表示式 re 是一種小型的 高度專業化的程式設計序語言,它內嵌在python中,並通過re模組實現 它可以為想要匹配的相應字串集指定規則 該字串集可以包含英文語句 e mail位址 命令或任何你想要搞定的東西 可以使用re以各種方式來修改或分割字串 import re s r abc re.fi...