1. 程式人生 > 其它 >【學習筆記】最簡單通俗易懂的正則表示式教程

【學習筆記】最簡單通俗易懂的正則表示式教程

線上驗證網站:https://regex101.com/

學習參考:白月黑羽/《實戰Python網路爬蟲》

一.限定符

  1.  .

  匹配除了換行符之外的任何單個字元,任何一個字開頭,緊跟一個色字

  

  程式碼:

  

 

  r的含義:raw string原始字串

  compile產生一個Pattern物件,可以呼叫各種方法,對正則表示式的匹配方式  

  findall返回一個列表

 

  2.  ?

  表示前面的子表示式0次或1次

  

 

  最後一行,猴子逗號後面沒有其它字元了,但是?表示匹配1次或0次, 所以最後一行也選中了一個逗號字元。

 

  3.  *

  匹配前面的子表示式任意次,包括0次

  *代表代表前面這個任意字元出現任意次,0也算任意次

  

  對比:逗號本身代表一個字元,逗號後面沒有字元,點‘.’一定要匹配上一個字元

  

  注:中文逗號“,”

 

  以綠開頭,色出現任意次數的

  

 

  4.  +

  匹配前面的子表示式一次或多次,不包括0次

  

 

  *與+對比:+至少匹配一次

 

  5.  {}

  表示前面的字元匹配指定的次數

  注意:英文花括號,否則不生效

  

 

  

 

  

  

  6.  []

  方括號表示括號內可選 

  [abc] 可以匹配 a, b, 或者 c 裡面的任意一個字元。等價於 [a-c] 。

  [a-c] 中間的 - 表示一個範圍從a 到 c。

  .在方括號內僅表示.失去特殊含義

  ^在方括號內依舊錶示非

 

  7.  ()

  括號稱為正則表示式的組選擇

  

 

  8.  |

  表示匹配其中之一

 

二.對元字元的轉義

 

   反斜槓\為轉義字元

   

 

  注:此處*和+皆可

 

  反斜槓後面接一些字元,表示匹配 某種型別 的一個字元。  

  \d 匹配0-9之間任意一個數字字元,等價於表示式 [0-9]

  \D 匹配任意一個不是0-9之間的數字字元,等價於表示式 [^0-9]

  \s 匹配任意一個空白字元,包括 空格、tab、換行符等,等價於表示式 [\t\n\r\f\v]

  \S 匹配任意一個非空白字元,等價於表示式 [^ \t\n\r\f\v]

  \w 匹配任意一個文字字元,包括大小寫字母、數字、下劃線,等價於表示式 [a-zA-Z0-9_]

  預設情況也包括 Unicode文字字元,如果指定 ASCII 碼標記,則只包括ASCII字母

  \W 匹配任意一個非文字字元,等價於表示式 [^a-zA-Z0-9_]

 

  反斜槓也可以用在方括號裡面,比如 [\s,.] 表示匹配 : 任何空白字元, 或者逗號,或者點

 

三.起始結尾位置和單行多行模式

   ^表示匹配文字的起始位置

  正則表示式可以設定 單行模式 和 多行模式

  如果是 單行模式 ,表示匹配 整個文字 的開頭位置。(預設)

  如果是 多行模式 ,表示匹配 文字每行 的開頭位置。(re.M或者re.MULTILINE)

  

 

  $ 表示匹配文字的 結尾 位置。

  如果是 單行模式 ,表示匹配 整個文字 的結尾位置。

  如果是 多行模式 ,表示匹配 文字每行 的結尾位置。

  

 

四.切割字串

  正則表示式 [;,\s]\s* 指定了,分割符為 分號、逗號、空格 裡面的任意一種均可,並且 該符號周圍可以有不定數量的空格。 

  注:\s為空白字元

 

 

五.正則處理函式

  1.re.match函式

  從字串的開頭開始匹配一個模式,如果成功匹配,就返回一個匹配成功的物件,否則返回None。

  使用方式:re.match(pattern,string,flags=0)

  2.re.search函式

  掃描整個字串並返回第一次成功匹配的物件,如果匹配失敗,就返回None。

  使用方式:re.search(pattern,string,flags=0)

  3.re.findall函式

  用於獲取字串中所有匹配的字串,並以列表的形式返回。

  使用方式:re.findall(pattern,string,flags=0)

  4.re.sub函式

  用於替換字串中的匹配項,如果沒有匹配的項,則返回沒有匹配的字串。

  使用方式:re.sub(pattern,string,flags=0)