python學習-正則表示式及re模塊
阿新 • • 發佈:2017-05-23
我只 com 返回 現在 輸出 -1 完全匹配 group clu
python中的所有正則表達式函數都在re模塊中。import re導入該模塊。
1,創建正則表達式對象
想re.compile()傳入一個字符串值,表示正則表達式,它將返回一個Regex模式對象。
創建一個匹配手機號的(\d表示一個數字字符)
mphone_regex = re.compile(r‘\d\d\d-\d\d\d\d-\d\d\d\‘)
2,匹配正則表達式
regex對象的search()方法查找傳入的字符串,尋找該正則表達式的所有匹配。如果字符串中沒有找到該正則表達式模式,search()方法返回None。如果找到該模式,search()方法返回一個Match對象,
Match對象有一個group()方法,它返回被查找字符串中實際匹配的文本,如下
import re mphone_regex = re.compile(r‘\d\d\d-\d\d\d\d-\d\d\d\d‘) mo = mphone_regex.search(‘My mobile Phone Number is 133-1111-1111.‘) print(‘number is:%s‘%mo.group()) 輸出: number is:133-1111-1111
註意:字符串中的\n,\t分表表示換行、制表符,\是個轉義字符,\\才表示一個\。如果在字符串的前面加上r,可以將該字符串標記為原始字符串,它不包括轉移字符。
其順序為:
- import re 導入re模塊
- 用re.compile()創建一個Regex對象,最好帶上r
- 想Regex對象的search()方法傳入想查找的字符串。它返回一個Match對象
- 調用Match對象的group()方法,返回實際匹配文本的字符串
上面的也可以這樣寫:
import re mo = re.search(r‘\d{3}-\d{4}-\d{4}‘,‘My mobile Phone Number is 133-1111-1111‘) print(‘number is:%s‘%mo.group())
3,用括號分組
如果我只想要手機號的前三位怎麽辦?
import re mo = re.search(r‘(\d{3})-(\d{4}-\d{4})‘,r‘My mobile Phone Number is 133-1111-1111‘) #用()將正則表達式分成兩組 print(‘number is:%s‘%mo.group()) #group()沒有參數或者參數0表示整個匹配的文本 print(‘number is:%s‘%mo.group(0)) print(‘number is:%s‘%mo.group(1)) #1表示第一對括號匹配的內容 print(‘number is:%s‘%mo.group(2)) #1表示第一對括號匹配的
輸出:
number is:133-1111-1111 number is:133-1111-1111 number is:133 number is:1111-1111
如果要一次獲取所有的分組,就使用groups()。
import re mo = re.search(r‘(\d{3})-(\d{4}-\d{4})‘,r‘My mobile Phone Number is 133-1111-1111‘) #用()將正則表達式分成兩組 print(mo.groups()) #groups返回包含多個值的元組 first,last = mo.groups() print(first) print(last) 輸出: (‘133‘, ‘1111-1111‘) 133 1111-1111
那麽問題來了,既然()在正則表達式中有特殊的含義,那麽如何匹配文本中的()呢?使用\進行轉移,\(內容\)
import re mo = re.search(r‘(\(\d{3}\))-(\d{4}-\d{4})‘,r‘My mobile Phone Number is (133)-1111-1111‘) #用()將正則表達式分成兩組 print(mo.group()) print(mo.group(1)) 輸出: (133)-1111-1111 (133)
4,使用管道匹配多個分組
比如laowang和xiaozhang都出現在被查找的字符串中,第一次出現的匹配文本,將作為Match對象返回。
import re name = re.search(r‘laowang|xiaozhang‘,‘We team include laowang and xiaozhang.‘) print(name.group()) #第一個先匹配到誰,誰將作為Match對象返回 輸出: laowang
使用管道來匹配多個模式中的一個
import re name = re.search(r‘lao(wang|zhang|liu|luo|cc)‘,‘We team include laoliu,laoluo,laowang and laozhang.‘) print(name.group()) print(name.group(1)) 輸出: laoliu liu
name.group()返回完全匹配的文本‘laoliu’,name.grop(1)只返回第一個括號分組中匹配到的文本‘liu’。可以使用管道和()組合去匹配。另外如果匹配真正的|,需要轉意\|
import re name = re.search(r‘lao(wang|zhang|liu|luo|cc)-(er|san|si|wu)‘,‘We team include laoliu-qq,laoluo-er,laowang-sfs and laozhang.‘) print(name.group()) print(name.group(1)) print(name.group(2)) 輸出: laoluo-er luo er
未完待續。。。。
python學習-正則表示式及re模塊