1. 程式人生 > >python學習-正則表示式及re模塊

python學習-正則表示式及re模塊

我只 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})
,rMy 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}),rMy 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}),rMy 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(rlaowang|xiaozhang,We team include laowang and xiaozhang.)
print(name.group()) #第一個先匹配到誰,誰將作為Match對象返回

輸出:
laowang

使用管道來匹配多個模式中的一個

import re
name = re.search(rlao(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(rlao(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模塊