Python--正則表達式

1、re.math函數

  • re.math嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
  • 語法:re.match(pattern,string,flags=0) pattern–匹配的正則表達式 string–要匹配的字符串 flags–標誌位,用於控制正則表達式的匹配方式
  • pattern–匹配的正則表達式 string–要匹配的字符串 flags–標誌位,用於控制正則表達式的匹配方式
import re
line = "Cats are smarter than dogs"
# .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符
matchObj = re.match(r'(.* )are(.*)', line, re.M | re.I)
#matchObj = re.match( r'are (.*?) .*', line, re.M|re.I)
#matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
    print("matchObj.group() : ", matchObj.group())
    print("matchObj.group(1) : ", matchObj.group(1))
    print("matchObj.group(2) : ", matchObj.group(2))
else:
    print("No match!!")

輸出

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

2、re.search函數

  • re.search掃描整個字符串並返回第一個成功的匹配;
  • 語法:re.search(pattern, string, flags=0);
import re
line = "Cats are smarter than dogs";

searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)

if searchObj:
    print("searchObj.group() : ", searchObj.group())
    print("searchObj.group(1) : ", searchObj.group(1))
    print("searchObj.group(2) : ", searchObj.group(2))
else:
    print("Nothing found!!")

輸出:

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

re.match與re.search的區別
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。

3、re.sub – 用於替換字符串中的匹配項
語法:re.sub(pattern,repl,string,count=0,flags=0)

  • pattern: 正則中的模式字符串。
  • repl: 替換的字符串,也可爲一個函數。
  • string: 要被查找替換的原始字符串。
  • count: 模式匹配後替換的最大次數,默認0表示替換所有的匹配。
  • flags: 編譯時用的匹配模式,數字形式。
import re
phone = "2004-959-559 # 這是一個電話號碼"
# 刪除註釋
# .* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字符 '$'匹配一行字符串的結尾
num = re.sub(r'#(.*$)', '', phone)
print(num)

# 移除非數字的內容
# '\D'匹配任意非數字的字符
num = r

輸出:

2004-959-559 
2004959559

4、compile函數
compile函數用於編譯正則表達式,生成一個正則表達式對象,供match()和search()這兩個函數使用。
語法格式:re.compile(pattern[,flags])

  • pattern : 一個字符串形式的正則表達式
  • flags 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數爲:
import re
# '\d'用於匹配任意數字,等價於[0-9]   '+'用於匹配1個或多個表達式
pattern= re.compile('\d+')
# 從頭部開始查找,沒有匹配
m = pattern.match('one12twothree34four')
print(m)
# 從'1'的位置開始匹配
m = pattern.match('one12twothree34four',3,10)
print(m)
m=pattern.search('one12twothree34four',5)
print(m)

輸出:

None
<_sre.SRE_Match object; span=(3, 5), match='12'>
<_sre.SRE_Match object; span=(13, 15), match='34'>

5、findall – 在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
語法格式:
語法格式:find(string[,pos[,endpos]])

  • string:待匹配的字符串。
  • pos:可選參數,指定字符串的起始位置,默認爲0。
  • endpos:可選參數,指定字符串的結束位置,默認爲字符串的長度。
pattern = re.compile('\d+')
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456',0,10)
print(result1)
print(result2)

輸出:

['123', '456']
['88', '12']

6、re.finditer
和 findall 類似,在字符串中找到正則表達式所匹配的所有子串,並把它們作爲一個迭代器返回。
語法格式:re.finditer(pattern, string, flags=0)

it = re.finditer(r"\d+", "12a32bc43jf3")
for match in it:
    print(match.group())

輸出:

43
3

7、re.split
split 方法按照能夠匹配的子串將字符串分割後返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
maxsplit:分隔次數,maxsplit=1 分隔一次,默認爲 0,不限制次數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章