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')