1. 程式人生 > >python 正則表示式re模組

python 正則表示式re模組

#####################總結##############

   優點:  靈活, 功能性強, 邏輯性強.           

   缺點:  上手難,旦上手, 會愛上這個東西   

   工具: 各大文字編輯器一般都有正則匹配功能. 我們也可以去 http://tool.chinaz.com/regex/進行線上測試.

   正則表示式由普通字元和元字元組成,普通字元包含大小寫字母, 數字,在匹配普通字元的時候我們直接寫就可以了

(1) 字元組 

  字元組很簡單用[]括起來,在[]中出現的內容會被匹配,例如:[abc] 匹配a或b或c 

  [a-z] 匹配a到z之間的所有字母, [0-9]匹配所有阿拉伯數字               

     [a-zA-Z0-9]  : 匹配的是大寫字母,小寫字母和阿拉伯數字

(2)簡單元字元

  • .    匹配除換行符以外的任意字元
  • \w 匹配字母或數字下劃線
  • \s  匹配任意的空白符
  • \d  匹配數字
  • \n  匹配一個換行符
  • \t   匹配一個製表符
  • \b  匹配一個單詞的結尾
  • ^   匹配字串的開始
  • $  匹配字串的結尾
  • \W 匹配非字母或數字或下劃線
  • \D  匹配非數字
  • \S  匹配非空白符
  • a|b 匹配字元a或字元b
  • ()   匹配括號內表示式,也表示一個組
  • [......]   匹配字元組中的字元
  • [^...]   匹配除了字元組中字元的所有字元

(3)量詞

當一次性匹配多個字元時,需要用到量詞

  • *   重複零次或更多次
  • +  重複一次或多次
  • ?  重複零次或一次
  • {n} 重複n次
  • {n,} 重複n次或者更多次
  • {n,m}重複n到m次

(4)惰性匹配和貪婪匹配

在量詞中 *,+,{ }都屬於貪婪匹配,就是儘可能多的匹配到結果.

str: 麻花藤昨天讓英雄聯盟關服了 
reg: 麻花藤.* 
此時匹配的是整句話

在使用.*後面如果加了? 則是儘可能少的匹配,

str: 麻花藤昨天讓英雄聯盟關服了 
reg: 麻花藤.*?
此時匹配的是 麻花藤 

.*?x的特殊含義找到下一X為止

str: abcdefgxhijklmn 
reg: .*?x 
結果: abcdefgx

(5) 分組

  在正則中使用()進行分組.

   比如. 我們要匹配身份證號,身份證號分成兩種,老的身份證號有15位,新的身份證號有18位,並且新的身份證號結尾有可能是x

給出以下正則: 
^[1-9]\d{13,16}[0-9x]$      錯誤
^[1-9]\d{14}(\d{2}[0-9x])?$      正確
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$      正確

(6)轉義:

在正則表示式中, 有很多有特殊意義的是元字元,比如\n和\s等,如果要在正則中匹 配正常的"\n"而不是"換行符"就需要對"\"進行轉義, 變成'\\'.

在python中, 無論是正則表示式, 還是待匹配的內容, 都是以字元串的形式出現的, 在字元串中\也有特殊的含義, 本身還需要轉義.

所以如果匹配一次"\n", 字串中要寫成'\\n', 那麼正則里就要寫成"\\\\n",這樣就太麻煩了. 這個時候我們就用到了r'\n'這個概念, 此時的正則是r'\\n'就可以了