python之正則表達式

1)正則表達式

用管道符號(|)匹配多個正則表達式閉包

舉例 函數

at | home     匹配 at, home對象

 

2)字符串

匹配任意一個單個的字符(.)string

舉例it

f.o  匹配在「f」和"o"中間的任何字符,如fao, f9o, f#o等io

 

3)編譯

從字符穿的開頭或結尾或單詞邊界開始匹配(^/$/\b\B)搜索

\b匹配的模式是一個單詞邊界,與之對應的模式必定在一個單詞的開頭;

\B只匹配出如今一個單詞中間的模式,即不在單詞邊界上的字符。

舉例

^From  匹配任何以From開始的字符串

/bin/tcsh$ 匹配任何以/bin/tcsh結束的字符串

^subject: hi$ 匹配僅由subject: hi組成的字符串

the   任何包含有「the」的字符串

\bthe 任何以「the」開始的字符串

\bthe\b 僅匹配單詞「the」

 

4)建立字符類([])

使用方括號的正則表達式會匹配方括號裏的任何一個字符。

方括號只有邏輯或的功能。

舉例:

b[aeiu]t  匹配字符串 bat, bet, bit, but

[cr][23][dp][o2] 匹配字符串有16個組合,先[cr]選一個,接着[23]選一個,......,最後[o2]選一個。

 

5)指定範圍(-)和否認(^)

方括號裏一對符號中間的連字符(-)用來表示一個字符的範圍。如[0-9],匹配十進制數

左方括號後第一個字符是上箭頭符號(^),表示不匹配製定字符集裏的任意字符。如[^aeiou],匹配一個非元音字符

 

6)使用閉包操做符(*, +, ? {})實現屢次出現/重複匹配

*:  匹配它左邊那個正則表達式出現0次或0次以上的狀況;

+: 匹配它左邊那個正則表達式至少出現一次的狀況;

?:   匹配它左邊那個正則表達式模式出現0次或一次的狀況。

{}: 如{M}表示匹配M次出現的狀況,{M,N}表示匹配M次到N次出現的狀況。

[dn]ot? 匹配最多有一個字符「t」,即 do, no, dot, not.

[0-9]{15, 16} 匹配15或者16位數字,例如信用卡號碼

</?[^>]+> 匹配全部合法的HTML標籤的字符串,即<...>、</...>。

 

7)特殊字符   

一些特殊字符能夠用來表明字符集合。

\d:  表示[0-9]

\w: 表示[A-Za-z0-9]

\s:  表示空白字符

\D:  表示非十進制數字的字符,即[^0-9]

舉例:

\w+-\d+ 表示一個字母和數字組成的字符串和至少一個數字,例如:ABCD-9

\d{3}-\d{3}-\d{4} 例如 800-555-1212

\w+@\w+\.com 例如xxxx@yyyy.com

 

8)用圓括號(())組建組

咱們不只想知道是否整個字符串匹配正則表達式,還想在匹配成功時取出某個特定的字符串或子字符串。

()的功能:

對正則表達式進行分組

匹配子組

舉例:

m = re.match('(a(b))', 'ab') 兩個子組

m.group() 全部匹配部分

m.group(1) 匹配的子組1 輸出‘ab’

m.group(2) 匹配的子組2 輸出'b'

m.groups() 全部匹配的子組的元組 輸出 ('ab', 'b')

 

re模塊:核心函數和方法

complie(pattern, flags=0) 

對正則表達式模式pattern進行編譯,flags是可選標識符,並返回一個regex對象

re模塊的函數和regex對象的方法

match(pattern, string, flags=0)

嘗試用正則表達式模式pattern匹配字符串string,flags是可選標識符,若是匹配成功,則返回一個匹配對象;不然返回None

search(pattern, string, flags=0)

在字符串string中搜索正則表達式模式pattern的第一次出現,若是匹配成功,則返回一個匹配對象;不然返回None

findall(pattern, string[,flags])

在字符串中搜索正則表達式模式pattern的全部出現(非重複),返回一個匹配對象的列表

finditer(pattern, string[,flags])

和findall()相同,但返回的不是列表而是迭代器;對於每一個匹配,該迭代器返回一個匹配對象

split(pattern, string, max=0)

根據正則表達式pattern中的分隔符把字符string分割爲一個列表,返回成功匹配的列表,最多分割max次

sub(pattern, repl, string, max=0)

把字符串string中全部匹配正則表達式pattern的地方替換成字符串repl,若是max的值沒有給出,則對全部匹配的地方進行替換

 匹配對象的方法

group(num=0) 返回所有匹配對象

groups()  返回一個包含所有匹配的子組的元組

 

匹配多個字符串( | )

bt = 'bat|bet|bit'

m = re.match(bt, 'bat')

 

重複、特殊字符和子組

patt = '\w+@(\w+\.)?\w+\.com'

m = re.match(patt, 'nobody@xxx.com').group()

if m is not None: m.group()

輸出: 'nobody@xxx.com'

 

m = re.match('(\w\w\w)-(\d\d\d)', 'abc-123')

m.group()  輸出 'abc-123'

m.group(1) 輸出'abc'

m.group(2) 輸出‘123’

m.groups() 輸出(‘abc’, '123')

相關文章
相關標籤/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。