re模塊下的函數(shù)
compile(pattern):創(chuàng)建模式對象
import repat=re.compile('A')m=pat.search('CBA') #等價于 re.search('A','CBA')print m<_sre.SRE_Match object at 0x9d690c8> #匹配到了,返回MatchObject(True)m=pat.search('CBD')print mNone #沒有匹配到,返回None(False)search(pattern,string):在字符串中尋找模式
m = re.search('asd','ASDasd')print m<_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)m = re.search('asd','ASDASD')print mNone #沒有匹配到,返回None(False)match(pattern,string):在字符串開始處匹配模式
m = re.search('asd','ASDasd')print m<_sre.SRE_Match object at 0xb72cd6e8> #匹配到了,返回MatchObject(True)m = re.search('asd','ASDASD')print mNone #沒有匹配到,返回None(False)等價于
pat=re.compile('a')print pat.match('Aasd')Noneprintpat.match('aASD')<_sre.SRE_Match object at 0xb72cd6e8>上面的函數(shù)返回都可以在if條件語句中進(jìn)行判斷:
if pat.search('asd'):... print 'OK'... OK #找到返回if re.search('a','ASD'):... print "OK"... #沒有找到split(pattern,string):根據(jù)模式分割字符串,返回列表
re.split(',','a,s,d,asd')['a', 's', 'd', 'asd'] #返回列表 pat = re.compile(',')pat.split('a,s,d,asd')['a', 's', 'd', 'asd'] #返回列表 re.split('[, ]+','a , s ,d ,,,,,asd') #正則匹配:[, ]+,后面說明['a', 's', 'd', 'asd'] re.split('[, ]+','a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次數(shù)['a', 's', 'd ,,,,,asd'] pat = re.compile('[, ]+') #正則匹配:[, ]+,后面說明pat.split('a , s ,d ,,,,,asd',maxsplit=2) # maxsplit 最多分割次數(shù)['a', 's', 'd ,,,,,asd']findall(pattern,string):列表形式返回匹配項
re.findall('a','ASDaDFGAa') ['a', 'a'] #列表形式返回匹配到的字符串pat = re.compile('a')pat.findall('ASDaDFGAa')['a', 'a'] #列表形式返回匹配到的字符串pat = re.compile('[A-Z]+') #正則匹配:'[A-Z]+' 后面有說明pat.findall('ASDcDFGAa')['ASD', 'DFGA'] #找到匹配到的字符串pat = re.compile('[A-Z]')pat.findall('ASDcDFGAa') #正則匹配:'[A-Z]+' 后面有說明['A', 'S', 'D', 'D', 'F', 'G', 'A'] #找到匹配到的字符串pat = re.compile('[A-Za-z]') #正則匹配:'[A-Za-z]+' 匹配所有單詞,后面有說明pat.findall('ASDcDFGAa')['A', 'S', 'D', 'c', 'D', 'F', 'G', 'A', 'a'] sub(pat,repl,string) :用repl替換 pat匹配項
(留的是中間的,因為中間在中心)
re.sub('a','A','abcasd') #找到a用A替換,后面見和group的配合使用'AbcAsd'pat = re.compile('a')pat.sub('A','abcasd')'AbcAsd' pat=re.compile(r'www/.(.*)/..{3}') #正則表達(dá)式 #在Python的string前面加上‘r', 是為了告訴編譯器這個string是個raw string,不要轉(zhuǎn)譯反斜杠 '/' 。 #例如,/n 在raw string中,是兩個字符,/和n, 而不會轉(zhuǎn)譯為換行符。 #由于正則表達(dá)式和 / 會有沖突,因此,當(dāng)一個字符串使用了正則表達(dá)式后,最好在前面加上'r'。 #與大多數(shù)編程語言相同,正則表達(dá)式里使用"/"作為轉(zhuǎn)義字符,這就可能造成反斜杠困擾。 #假如你需要匹配文本中的字符"/",那么使用編程語言表示的正則表達(dá)式里將需要4個反斜杠"http:////": #前兩個和后兩個分別用于在編程語言里轉(zhuǎn)義成反斜杠,轉(zhuǎn)換成兩個反斜杠后再在正則表達(dá)式里轉(zhuǎn)義成一個反斜杠。 #Python里的原生字符串很好地解決了這個問題,這個例子中的正則表達(dá)式可以使用r"http://"表示。 #同樣,匹配一個數(shù)字的"http://d"可以寫成r"/d"。 #有了原生字符串,你再也不用擔(dān)心是不是漏寫了反斜杠,寫出來的表達(dá)式也更直觀。 #不是說 加了r /就沒有轉(zhuǎn)譯功能,好亂,就直接記住1句話: #當(dāng)一個字符串使用了正則表達(dá)式后,最好在前面加上'r',這樣你再也不用擔(dān)心是不是漏寫了反斜杠,寫出來的表達(dá)式也更直觀pat.match('www.dxy.com').group(1)'dxy're.sub(r'www/.(.*)/..{3}',r'/1','hello,www.dxy.com')pat.sub(r'/1','hello,www.dxy.com') 'hello,dxy'# r'1' 是第一組的意思#通過正則匹配找到符合規(guī)則的"www.dxy.com" ,取得 組1字符串 去替換 整個匹配。 pat=re.compile(r'(/w+) (/w+)') #正則表達(dá)式s='hello world ! hello hz !'pat.findall('hello world ! hello hz !')[('hello', 'world'), ('hello', 'hz')]pat.sub(r'/2 /1',s) #通過正則得到組1(hello),組2(world),再通過sub去替換。即組1替換組2,組2替換組1,調(diào)換位置。 'world hello!hz hello!'
新聞熱點
疑難解答