正則表達(dá)式是一種用來(lái)匹配字符串的強(qiáng)有力的武器匆骗。它的設(shè)計(jì)思想是用一種描述性的語(yǔ)言來(lái)給字符串定義一個(gè)規(guī)則卿捎,凡是符合規(guī)則的字符串,我們就認(rèn)為它‘匹配了’视搏,否則审孽,該字符串就是不合法的。
re模塊
- match()方法判斷是否匹配浑娜,如果匹配成功佑力,返回一個(gè)match對(duì)象,否則返回None棚愤。只能從字符串起始的位置去匹配
- search()同match()方法搓萧, 但是會(huì)在整個(gè)字符串里去匹配,直到匹配到為止
import re
result1 = re.match('\d+','edvr4556t5gtbyh675454')
print result1
if result1:
print result1.group()
else:
print 'nothing'
result2 = re.search('\d+','edvr4556t5gtbyh675454')
print result2
if result2:
print result2.group()
else:
print 'nothing'
#打印結(jié)果
None
nothing
<_sre.SRE_Match object at 0x01EF2918>
4556
#在字符串中用正則表達(dá)式\d+ 匹配數(shù)字宛畦,如果為真,返回匹配結(jié)果揍移,否則返回nothing
- findall()
match()方法判斷是否匹配次和,如果匹配成功,返回一個(gè)match對(duì)象那伐,否則返回None踏施。會(huì)在整個(gè)字符串中匹配石蔗,并且找到所有的
import re
result3 = re.findall('\d+','ed111vr4556t5g333tbyh675454')
print result3
#打印結(jié)果
['111', '4556', '5', '333', '675454']
- compile 編譯,re模塊內(nèi)部會(huì)干兩件事情
1畅形、編譯正則表達(dá)式养距,如果正則表達(dá)式的字符串本身不合法,會(huì)報(bào)錯(cuò)日熬;
2棍厌、用編譯后的正則表達(dá)式去編譯字符串。
如果一個(gè)正則表達(dá)式要是重復(fù)使用幾千次竖席,出于效率的考慮耘纱,我們可以預(yù)編譯該正則表達(dá)式,接下來(lái)重復(fù)使用時(shí)就不需要編譯這個(gè)步驟了毕荐,直接匹配:
import re
com = re.compile('\d+') #編譯
result1 = com.findall('123wed44444kll3333')
print result1
result2 = com.match('4343ds9090fg321').group()
print result2
result3 = com.search('asd8888frs2222').group()
print result3
#打印結(jié)果:
['123', '44444', '3333']
4343
8888
- 分組groups
分組就是用一對(duì)圓括號(hào)“()”括起來(lái)的正則表達(dá)式束析,匹配出來(lái)的內(nèi)容就表示一個(gè)分組。從正則表達(dá)式的左邊開(kāi)始看憎亚,看到第一個(gè)左括號(hào)“(”表示第一個(gè)分組员寇,第二個(gè)表示第二個(gè)分組,以此類(lèi)推第美,需要注意的是有一個(gè)全局分組(就是0)蝶锋,就是整個(gè)正則表達(dá)式。
import re
result2 = re.search('(\d+)asdfa(\d+)','as123asdfa335633sdeasdfdf')
print result2.group()
print result2.groups() #groups只打印圓括號(hào)里的內(nèi)容
#打印結(jié)果
123asdfa335633
('123', '335633')
正則表達(dá)式的常用格式
1斋日、字符:
\d :數(shù)字
\w :下劃線牲览、數(shù)字、字符
\t :制表符
. :除了回車(chē)以外的所有字符
2恶守、次數(shù):
* 大于等于零
+ 大于等于1
第献?0或者1
{m} 次數(shù),m次
{m,n} 范圍兔港,m到n之間的篩選IP庸毫,例子
import re
ip = '12.34.43.dsfa.345rs.354s~234sd389d+34f192.168.32.43_w342d~@#9436'
result1 = re.findall('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}',ip)
print result1
result2 = re.findall('(?:\d{1,3}\.){3}\d{1,3}',ip)
print result2
#打印結(jié)果
['192.168.32.43']
['192.168.32.43']
- 自學(xué)
《正則表達(dá)式30分鐘教程》