1. 程式人生 > 實用技巧 >re庫

re庫

re.search()    在一個字串中搜索匹配正則表示式的第一個位置,返回match物件
re.match()    在一個字串的開始位置匹配正則表示式,返回match物件
re.findall()    搜尋字串,以列表的形式返回全部能匹配的子串
re.split()    將一個字串按照正則表示式匹配的結果進行分割,返回列表型別
re.finditer()    搜尋字串,返回一個匹配的迭代型別,每個迭代元素是match物件
re.sub()    在一個字串中替換所有匹配正則表示式的子串,返回替換後的字串

regex = re.compile(pattern,flags=0)

此時的regex是一個正則表示式

例:

content = 'Hello, I am Jerry, from Chongqing, a montain city, nice to meet you……'
    regex = re.compile('\w*o\w*')
    y = regex.match(content)
    print(y)
    print(type(y))
    print(y.group())
    print(y.span())

# <_sre.SRE_Match object; span=(0, 5), match='Hello'>
# <class
'_sre.SRE_Match'> # Hello # (0, 5)

re.search(pattern,string,flags=0)

pattern    正則表示式的字串或原生字串表示
string    帶匹配的字串
flags    正則表示式使用時的控制標記

flags的常用標記:

re.I   re.IGNORECASE    忽略正則表示式的大小寫,[A-Z]能夠匹配小寫字元
re.M  re.MULTLINE    正則表示式中的^操作符能夠將給定字串的每行當做匹配開始
re.S  re.DOTALL    正則表示式中的.操作符能夠匹配所有字元,預設匹配除\n外的所有字元

例:

1 import re
2 match1 = re.search(r'[1-9]\d{5}','BIT 100081 TSU100084')
3 if match1:
4     print(match1.group(0))
5 
6 #結果:100081

re.match(pattern,string,flags=0)

例:

1 import re
2 match2 = re.match(r'[1-9]\d{5}','BIT 100081')
3 if match2:
4     print(match2.group(0))
5     
6 #print(match2.group(0)),注意,如果這裡不直接判斷re.match()返回的物件是否為空,會報錯,
7 #因為這裡的match2並沒有從這個字串的開始部分匹配到目標字串,所以返回的match2物件沒有group這個引數

1 #對上面的程式碼進行修改
2 match3 = re.match(r'[1-9]\d{5}','100081 BIT')
3 if match3:
4     print(match3.group(0))
5 
6 #輸出:'100081'

re.findall(pattern,string,flags=0)

例:

1 import re 
2 ls = re.findall(r'[1-9]\d{5}','BIT100081 CLS100084')
3 print(ls)#['100081','100042'],將所有匹配的輸出
4 for i in ls:
5     print(i)
6 #100081
7 #100084

re.split(pattern,string,maxsplit,flags=0)

例:

# maxsplit最大分割數,剩餘部分作為最後一個元素輸出
 1 import re
 2 m = re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084')
 3 #re.finditer返回的是迭代型別
 4 #如果此時執行print(m),輸出是<callable_iterator object at 0x0000024203F83E10>
 5 for i in m:
 6     print(i)
 7 #輸出:
 8 #<re.Match object; span=(3, 9), match='100081'>
 9 #<re.Match object; span=(13, 19), match='100084'>
10 #正確的輸出格式
11 for m in re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084'):
12     if(m):
13         print(m.group(0))
14 #100081
15 #100084

re.finditer(pattern,string,maxsplit,flags=0)

例:

 1 import re
 2 m = re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084')
 3 #re.finditer返回的是迭代型別
 4 #如果此時執行print(m),輸出是<callable_iterator object at 0x0000024203F83E10>
 5 for i in m:
 6     print(i)
 7 #輸出:
 8 #<re.Match object; span=(3, 9), match='100081'>
 9 #<re.Match object; span=(13, 19), match='100084'>
10 #正確的輸出格式
11 for m in re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084'):
12     if(m):
13         print(m.group(0))
14 #100081
15 #100084

re.sub(pattern,repl,string,count=0,flags=0)

例:

# repl    替換匹配字串的字串
# count    匹配的最大替換次數
1 import re
2 print(re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100084'))
3 #BIT:zipcode TSU:zipcode
4 print(re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100084',count=1))
5 #BIT:zipcode TSU100084