正規表示式為高階的文字模式匹配,抽取,與/或文字形式的搜尋和替換功能提供了基礎,簡單的來說,正規表示式是由一些字元和特殊符號組成的字串。python通過標準庫中的re模組來支援正規表示式。
首先介紹一下最常見的特殊符號和字元,即所謂的元字元。
表示法描述
正規表示式用法示例
literal
匹配文字字串的字面值literal
re.findall("chen","sadchen21")
.
匹配任意字元(除了\n之外)
re.findall("c..n","sadchen21")
^
從字串開始部分開始匹配
re.findall("^sad","sadchen21")
$匹配字串的終止部分
re.findall("21$","sadddchen21")
re.findall("i\\b","i am czp") 通過轉義符\來實現
re.findall("ka|b","sdkakb11") 匹配ka或b
re.findall("ka|b","sdka11")
re.findall("s..a","sdka11") 匹配在s和a之間任意的兩個字元
re.findall("..","sdka11") 匹配任意兩個字元
re.findall(".a","sdka112") 匹配a前的任意乙個字元
要顯式匹配乙個句點符號本身,必須使用反斜槓轉義句點符號的功能,例如「\.」
re.findall("^sa","sdka112") 匹配以s開頭的字元或字串
re.findall("12$","sdka112") 匹配以12結尾的字元或字串
匹配邊界字元「\b」
\b用於匹配乙個單詞的邊界,這意味著如果乙個模式必須位於單詞的起始部分,就不管該單詞前面(單詞位於字串中間)是否有任何字元(單詞位於首行),而\b將匹配出現在乙個單詞中間的模式,即不是單詞邊界
re.findall("er","never") 匹配任意包含the的字串
re.findall(r"er\b","never") 匹配任意以er為起始位置的字串
re.findall(r"er\b","evern") 匹配包含er但不以er為起始的字串
建立字符集「」
「.」可以用於匹配任意符號,但某些時候需要匹配某些特定字元,這就需要,用來匹配一對方括號中包含的任何字元。如b[ner]t匹配的字串就是bnt,bet,brt,方括號表示邏輯或的功能,對於單個字元,如果想要:要麼匹配a,要麼匹配b,就可以用[ab]表示,字符集只適用於單字元的情況,如果要匹配多個字元,就需要使用擇一方法「|」
最常用的特殊符號「」「+」「?」
""、"?"、"+"都可以用來匹配乙個、多個或者沒有出現的字串模式,"*」用來匹配其左邊的正規表示式出現零次或多次,「+」號將匹配一次或多次出現的情況,「?」將匹配零次或一次出現的正規表示式,而或這將最終精確的匹配前面的正規表示式n次或一定範圍的次數。
當模式匹配使用分組操作符的時候,正規表示式的引擎將試圖匹配出盡可能多的字元,這叫做貪婪匹配
re.findall("sad*","saddddsds") 匹配d,d可以出現0次,或多次
re.findall("sad+","saddddsds") 匹配d,d不可以出現0次,匹配1次或多次
re.findall("sad?","saddddsds") 匹配d,d可以出現0次,匹配0次或1次
re.findall("\d","sad123dsds") 匹配兩個連續的數字字元
如果想要提取任意已經成功匹配的特定字串或子字串,就需要用「()」來包裹正規表示式
當使用正規表示式的時候,一對圓括號可以實現以下任意乙個功能
常見的正規表示式屬性
Python 正規表示式 7
常見問題 1 使用正規表示式雖說通吃,但有的時候直接使用字串的方法也是個不錯的選擇。2 match 只會報告一次成功的匹配,並且匹配的位置必須是從字串的第乙個字元開始 search 函式遍歷整個字串,並報告它找到的第乙個匹配 3 貪婪vs非貪婪 當重複乙個正規表示式時,如果使用a 那麼結果是盡可能多...
正規表示式篇
利用正規表示式來判斷輸入的字串格式是否正確 string regex 1 d 2 0 4 d 25 0 5 1 9 d 1 9 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 判斷ip ...
Python 正規表示式(爬蟲篇)
實際上爬蟲有四個主要步驟 取 去掉對我們沒用處的資料 處理資料 按照我們想要的方式儲存和使用 我們爬下來的資料大部分都是全部的網頁,這些資料有時候是很龐大並且混亂的,大部分的董事是我們不關心的,所以我們需要將之按我們的需要過濾和匹配出來。那麼對於文字的過濾或者規則的匹配,最強大的就是正規表示式,是 ...