Python正則表達式使用詳情

       正則表達式(RE)是一種小型的、高度專業化的編程語言,python已經內嵌了正則表達式,並通過RE模塊實現。
工作原理:通過一些特定的字符去匹配你想要的內容,將與設定規則匹配的內容返回,不匹配的內容過濾,即不返回。

匹配字符
- 普通字符
  例如: test  與  'test' 匹配

- 元字符
 .   ^   $   *   +   ?   {}   []   \   |   ( )

定義正則表達式:
            正則名 = r ' 正則內容 '

實例:

 rule = r'test'

解釋:定義一個名爲rule的正則,其功能是匹配test字符串.


下面開始講解正則表達式的元字符:


[]   字符集:

-常用於匹配某一個字符集:如[a-z]; [A-Z] ; [0-9] ...

-元字符在字符集中不起作用,只相當於普通字符:如[abc$ ] ; [ hello* ]...

-擴展:匹配字符集以外的字符(補集匹配):[^abc]...特點:以^符號開頭


實例如下:

 #!/usr/bin/python 
# -*- coding: utf-8 -*- 

import re 

r = r'[a-c]test'  #制定一個首位字符爲'a-c'區間的正則 

print re.findall(r,'atest') 
print re.findall(r,'ctest') 
print re.findall(r,'dtest')


運行輸出:

['atest'] 
['ctest'] 
[] 
可見,以d開頭的字符串‘dtest’被過濾掉了。

補集匹配:

補集匹配時需要配合字符集[]來使用,當使用字符集[]時,其內部的首位爲^時,表示除了字符集以內的所有內容:


實例如下:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
 
import re 

r = r'[^xy]'  # 除 x y 以外的字符 

print re.findall(r,'x') 
print re.findall(r,'xy') 
print re.findall(r,'xyabc') 
print re.findall(r,'xiyjk')

實例輸出:

[] 
[] 
['a', 'b', 'c'] 
['i', 'j', 'k']
解釋:定義補集正則,此時除了 xy以外的內容,其它內容都進行輸出,與其位置無關。

^  匹配行首:

主要用於匹配字符串的頭部(開始)的字符,匹配則輸出,不匹配則過濾掉。


實例如下:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import re 

r = r'^head'  # 輸出以‘ head ’開始的字符串 

print re.findall(r,'head') 
print re.findall(r,'headfile') 
print re.findall(r,'heartkkk') 
print re.findall(r,'heaaaabb') 

實例輸出:

['head'] 
['head'] 
[] 
[] 


匹配頭部爲head的字符串,有則輸出該頭部信息,沒有則不輸出。


$  匹配行尾:

用於匹配字符串的尾部(末端)的字符,匹配則輸出,不匹配則過濾掉。


實例如下:

#!/usr/bin/python

#-*- coding: utf-8 -*-


importre


r= r'end$' # 制定以'end'結尾的字符串


printre.findall(r,'end')

printre.findall(r,'abcend')

printre.findall(r,'iiienn')

printre.findall(r,'hello python')

實例輸出:

['end'] 
['end'] 
[] 
[] 


\    轉義字符:

正則表達式中與其它語言一樣使用\進行字符轉義,其內部也提供了一些常用的轉義字符。

同時可以使用\字符取消所有的元字符,如:\$ , \* ,\+ …...


內部轉義字符:

\d:匹配任何十進制數: 相當於字符集 [0-9]

\D:匹配任何非數字字符: 相當於字符集[^0-9]

\s:匹配任何空白字符: 相當於字符集[\t\n\r\f\v]

\S:匹配任何非空白字符: 相當於字符集[^\t\n\r\f\v]

\w:匹配任何字母數字字符:相當於字符集[a-aA-Z0-9]

\W:匹配任何非字母數字字符:相當於字符集[^a-aA-Z0-9]


實例如下:

功能:將元字符  $ 轉換爲普通字符

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import re 

r = r'\$abc'  # 將'$'元字符轉義爲普通字符 

print re.findall(r,'abc') 
print re.findall(r,'$abc') 

運行輸出:

[] 
['$abc'] 

內部提供轉義字符實例:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import re 
 
r = r'\dyear'  # 用 \d 代替 [0-9] 

print re.findall(r,'2year') 
print re.findall(r,'dyear') 

運行輸出:

['2year'] 
[] 


*   匹配0次或以上:

用於指定前一個字符可以被匹配零次或 以上次數,匹配引擎會本着重複儘可能多次數去匹配,一般配合字符集[]使用。


例如:a[xyz]*b

表示:匹配以'a'開始,‘b’結束,中間是'x''y''z'字符中的任意字符、任意組合及任意次數的組合的字符。


實例如下:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import re 

r = r'hello*'  # 用 * 號制定 o 必須出現 零次或以上 

print re.findall(r,'hel') 
print re.findall(r,'hell') 
print re.findall(r,'hello') 
print re.findall(r,'helloo') 

運行輸出:

[] 
['hell'] 
['hello'] 
['helloo']


+   匹配1次或以上:

用於指定前一個字符可以被匹配一次或 以上次數,與*字符不一樣的就是+字符必須需要指定的字符必須出現一次,而*字符可以是0次。


實例如下:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import re 

r = r'hello+'  # 用 + 號制定 o 必須出現 一次或以上 

print re.findall(r,'hell') 
print re.findall(r,'hello') 
print re.findall(r,'helloo') 

運行輸出:

[] 
['hello'] 
['helloo'] 


?   可選匹配:

指定某一字符或區間字符進行匹配一次或零次,即可有可無的狀態。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re

r = r'ab?c'  # 指定 b 可有可無

print re.findall(r,'ac')
print re.findall(r,'abc')
print re.findall(r,'abbc')

運行輸出:

['ac']
['abc']
[]

拓展延伸:

貪婪模式和非貪婪模式,貪婪模式爲最大匹配,非貪婪模式則爲最小匹配!


實例如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re

r = r'ab*'     # 貪婪模式(最大匹配)
s = r'ab*?'    # 非貪婪模式(最小匹配)

print re.findall(r,'abbbbbb')
print re.findall(s,'abbbbbb')

運行輸出:

['abbbbbb']
['a']


{m,n}      區間限定符:

表示將某一字符限定在某一區間內,該限定符的規則爲至少重複m次,最多重複n次。其中m,n均爲整數。

當忽略m時,默認下邊界(至少)爲0,而忽略n時,默認上邊界(至多)爲無窮(0~20億次)。


實例如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import re

r = r'ab{2,5}c'  # 指定 b 重複次數在 2~5 次之間

print re.findall(r,'abc')     #重複 1 次
print re.findall(r,'abbc')      #重複 2 次
print re.findall(r,'abbbbbc')     #重複 5 次
print re.findall(r,'abbbbbbc')      #重複 6 次

運行輸出:

[]
['abbc']
['abbbbbc']
[]







發佈了58 篇原創文章 · 獲贊 112 · 訪問量 46萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章