Python的re模塊
Python的re模塊
1、 compile(pattern):創建模式對象
import re
pat = re.compile(‘A‘)
m = pat.search(‘CBA‘)
#等價於re.search(‘A’,’CBA’)
print(m)
#<_sre.SRE_Match object; span=(2, 3), match=‘A‘>
import re
pat = re.compile(‘a‘)
m = pat.search(‘CBA‘)
print(m) #沒有匹配到,返回None
2、 search(pattern,string):在字符串中尋找模式
import re
m = re.search(‘asd‘,‘ASDasd‘)
print(m)
#<_sre.SRE_Match object; span=(3, 6), match=‘asd‘>
上面的函數返回都可以在if條件語句中進行判斷:
If pat.search(‘asd’,’ASDasd’):
Print(‘ok’)
運行輸出了‘ok’。
3、 split(pattern,string):根據模式分割字符串,返回列表
a、
import re
m=re.split(‘,‘,‘a,s,d,asd‘) #以逗號為分界
print(m) #[‘a‘, ‘s‘, ‘d‘, ‘asd‘]
b、
import re
pat = re.compile(‘,‘)
m=pat.split(‘a,s,d,asd‘)
print(m) #[‘a‘, ‘s‘, ‘d‘, ‘asd‘]
c、
import re
m = re.split(‘[,]+‘,‘a,s,d ,,,,,asd‘)
#正則匹配:[,]+,後面說明
print(m) #[‘a‘, ‘s‘, ‘d ‘, ‘asd‘]
d、
import re
m= re.split(‘[,]+‘,‘a,s,d,e, ,,,,,asd‘,maxsplit=2)
#maxsplit最多分割次數
print(m)
#[‘a‘, ‘s‘, ‘d,e, ,,,,,asd‘]
e、
import re
pat = re.compile(‘[,]+‘)
m = pat.split(‘a,s,d,e, ,,,,,asd‘,maxsplit=2)
print(m) # [‘a‘, ‘s‘, ‘d,e, ,,,,,asd‘]
4、 findall(pattern,string):列表形式返回匹配項
import re
c=re.findall(‘a‘,‘aASDaDSDa‘)
print(c) # [‘a‘, ‘a‘, ‘a‘]
import re
pat = re.compile(‘a‘)
c = pat.findall(‘aASDaDSDa‘)
print(c) # [‘a‘, ‘a‘, ‘a‘]
import re
pat = re.compile(‘[A-Z]+‘)
c = pat.findall(‘aASDaDSDa‘)
print(c) # [‘ASD‘, ‘DSD‘]
import re
pat = re.compile(‘[A-Z]‘)
c = pat.findall(‘aASDaDSDa‘)
print(c) # [‘A‘, ‘S‘, ‘D‘, ‘D‘, ‘S‘, ‘D‘]
import re
pat = re.compile(‘[A-Za-z]+‘)
#正則匹配:‘[A-Za-z]+‘匹配所有單詞
c = pat.findall(‘aASD aDSDa‘)
print(c) # [‘aASD‘, ‘aDSDa‘]
import re
pat = re.compile(‘[A-Za-z]‘)
c = pat.findall(‘aASD aDSDa‘)
print(c)
#[‘a‘, ‘A‘, ‘S‘, ‘D‘, ‘a‘, ‘D‘, ‘S‘, ‘D‘, ‘a‘]
5、 sub(pat,repl,string):用repl替換pat匹配項
import re
c = re.sub(‘a‘,‘A‘,‘aASD aDSDa‘)
print(c) #AASD ADSDA
import re
pat = re.compile(‘a‘)
c = pat.sub(‘A‘,‘aASD aDSDa‘)
print(c) # AASD ADSDA
import re
pat = re.compile(r‘www\.(.*)\..{3}‘)
‘‘‘
在Python的string前面加上‘r’,是為了告訴編輯器這個string是raw string,不要轉譯反斜杠‘\’。
例如,\n在raw string中,是兩個字符,\和n,而不會轉譯為換行符。
由於正則表達式和\會有沖突,因此,當一個字符串使用了正則表達式後,最好在前面加上‘r’。
於大多數編程語言相同,正則表達式裏用“\”作為轉義字符,這就可能造成反斜杠困擾。
假如你需要匹配文本中的字符“\”,那麽使用編程語言表示的正則表達式裏將需要4個反斜杠“\\\\”:
前兩個和後兩個分別用於在編程語言裏轉義成反斜杠,轉換成兩個反斜杠後再在正則表達式裏轉義成一個反斜杠。
Python裏的原生字符串很好地解決了這個問題,這個例子中的正則表達式可以使用r“\\”表示。
同樣,匹配一個數字的\\d可以寫成r“\d”。
有了原生字符串,你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直觀。
最好記住這句話:
當一個字符串使用了正則表達式後,最好在前面加上‘r’,這樣你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直觀
‘‘‘
ret = pat.match(‘www.dxy.com‘).group(1)
print(ret) # dxy
a=re.sub(r‘www\.(.*)\..{3}‘,r‘\1‘,‘hello,www.dxy.com‘)
print(a) # hello,dxy
b = pat.sub(r‘\1‘,‘hello,www.dxy.com‘)
print(b) # hello,dxy
‘‘‘
r‘\1‘是第一組的意思
通過正則匹配找到符合規則的“www.dxy.com”,取得組1字符串去替換整個匹配
‘‘‘
pat = re.compile(r‘(\w+)(\w+)‘)
s = ‘hello world! hello hz!‘
d = pat.findall(‘hello world ! hello hz !‘)
print(d)
# [(‘hell‘, ‘o‘), (‘worl‘, ‘d‘), (‘hell‘, ‘o‘), (‘h‘, ‘z‘)]
c=pat.sub(r‘\2\1‘,s)
print(c) # ohell dworl! ohell zh!
‘‘‘
通過正則得到組1(hell),組2(o),再通過sub去替換。即組1替換組2,組2替換組1,調換位置
‘‘‘
6、 escape(string):對字符串裏面的特殊字符串進行轉義
import re
a=re.escape(‘www.dxy.com‘)
print(a) #www\.dxy\.com
7、group:獲取子模式(組)的匹配項
上面的函數中,只有match、search有group方法,其他的函數沒有。
import re
pat = re.compile(r‘www\.(.*)\.(.*)‘)
#用()表示1個組,2個組
m = pat.match(‘www.dxy.com‘)
print(m.group())
#默認為0,表示匹配整個字符串。結果:www.dxy.com
print(m.group(1))
#返回給定組1匹配的字符串。結果:dxy
print(m.group(2))
#返回給定組2匹配的字符串。結果:com
8、 start:給定組匹配項的開始位置
import re
pat = re.compile(r‘www\.(.*)\.(.*)‘)
m = pat.match(‘www.dxy.com‘)
print(m.start(2)) #組2開始的索引,結果:8
9、end:給定組匹配項的結束位置
import re
pat = re.compile(r‘www\.(.*)\.(.*)‘)
m = pat.match(‘www.dxy.com‘)
print(m.end(2)) #組2結束的索引。結果:11
10、span:給定組匹配項的開始結束位置
import re
pat = re.compile(r‘www\.(.*)\.(.*)‘)
m = pat.match(‘www.dxy.com‘)
print(m.span(2))
#組2的開始、結束的索引。結果為(8,11)
Python的re模塊