1. 程式人生 > >python--(常用模塊-3-正則表達式)

python--(常用模塊-3-正則表達式)

表達 表達式 麻煩 enter 空白字符 tool 缺點 () ...

python--(常用模塊-3-正則表達式)

  正則表達式是對字符串操作的?種邏輯公式. 我們?般使?正則表達式對字符串進?匹
  配和過濾. 使?正則的優缺點:
  優點: 靈活, 功能性強, 邏輯性強.
  缺點: 上手難. 一旦上手, 會愛上這個東西
  工具: 各文本編輯器一般都有正則匹配功能. 我們也可以去
  http://tool.chinaz.com/regex/進?在線測試

  正則表達式由普通字符和元字符組成. 普通字符包含大小寫字母, 數字. 在匹配普通字符
  的時候我們直接寫就可以了. 比如"abc" 匹配的就是"abc". 我們如果用python也可以實現相
  同的效果. 所以普通字符沒什麽好說的. 重點在元字符上.


  元字符: 元字符才是正則表達式的靈魂. 元字符中的內容太多了, 在這裏我們只介紹一些
  常用的..

1.字符組

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

  如果字符組中的內容過多還可以使?- , 例如: [a-z] 匹配a到z之間的所有字? [0-9]
匹配所有阿拉伯數字
  思考: [a-zA-Z0-9]匹配的是什麽?
2. 簡單元字符
  基本的元字符. 這個東西網上一大堆,下面是幾個常用的

 1 .       匹配除換行符以外的任意字符
 2 \w     匹配字母或數字或下劃線
 3 \s      匹配任意的空白字符
4 \d 匹配數字 5 \n 匹配一個換行符 6 \t 匹配一個制表符 7 \b 匹配一個單詞的結尾 8 ^ 匹配字符串的開始 9 $ 匹配字符串的結束 10 \W 匹配非字母或數字或下劃線 11 \D 匹配非數字 12 \S 匹配非空字符 13 a|b 匹配字符a或字符b 14 () 匹配括號內的表達式,也表示一個組 15 [...] 匹配字符組中的字符 16 [^...] 匹配除了字符組中字符的所有字符

  3.量詞

    我們到目前匹配的所有內容都是單一的文字符號,那如何一次性匹配很多個字符呢,

我們用到量詞

1 *       重復零次或更多次
2 +       重復一次或更多次
3 ?       重復零次或一次
4 {n}     重復n次
5 {n,}    重復n次或更多次
6 {nm}    重復n到m次

  4.惰性匹配和貪婪匹配

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

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

  在使用.*後面如果加了?則是盡可能的少匹配.表示惰性匹配

 1 str: 麻花藤昨天讓英雄聯盟關服了
 2 reg: 麻花藤.*?
 3 此時匹配的是 麻花藤
 4 str: <div>胡辣湯</div>
 5 reg: <.*>
 6 結果: <div>胡辣湯</div>
 7 str: <div>胡辣湯</div>
 8 reg: <.*?>
 9 結果
10  <div>
11   </div>
12 str: <div>胡辣湯</div>
13 reg: <(div|/div*)?>
14 結果:
15   <div>
16   </div>

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

1 str: abcdefgxhijklmn 2 reg: .*?x 3 結果:abcdefgx

5.分組

    在正則中使?()進?分組. 比如. 我們要匹配?個相對復雜的?份證號. ?份證號分
成兩種. 老的?份證號有15位. 新的?份證號有18位. 並且新的?份證號結尾有可能

1 給出以下正則
2 ^[1-9]\d{13,16}[0-9x]$
3 
4 ^[1-9]\d{14}(\d{2}[0-9x])?$
5 
6 
7 ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

6.轉義

  在正則表達式中, 有很多有特殊意義的是元字符, ?如\n和\s等,如果要在正則中匹
配正常的"\n"?不是"換?符"就需要對"\"進?轉義, 變成‘\\‘.在python中, ?論是正則表達式, 還
是待匹配的內容, 都是以字符串的形式出現的, 在字符串中\也有特殊的含義, 本身還需要轉

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

練習:
1. 匹配郵箱
2. 匹配手機號
3. 匹配生日.日期格式(yyyy-MM-dd)
4. 匹配電話號碼
5. 匹配IP

  

python--(常用模塊-3-正則表達式)