一、準(zhǔn)備知識(shí)
\d:匹配一個(gè)數(shù)字
\w:匹配一個(gè)字母
. :匹配任意字符
\s :匹配一個(gè)空格
?表示0個(gè)或1個(gè)字符
+表示至少一個(gè)字符
*表示任意個(gè)字符(包括0個(gè))
{n}表示n個(gè)字符,{n,m}表示n-m個(gè)字符
[0-9a-zA-Z_]可以匹配一個(gè)數(shù)字、字母或者下劃線
(P|p)ython可以匹配'Python'或者'python'
^py$只能匹配'py'了
二、在Python中使用
(1)匹配
import re
re.match(r'^\d{3}-\d{3,8}$', '010-12345')
<_sre.SRE_Match object at 0x1026e18b8>
re.match(r'^\d{3}-\d{3,8}$', '010 12345')
match()方法判斷是否匹配,如果匹配成功,返回一個(gè)Match對(duì)象,否則返回None
(2)切分字符串
import re
re.split(r'[\s\,\;]+', 'a,b;; c d')
['a', 'b', 'c', 'd']
(3)提取子串
import re
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
m.group(0)
'010-12345'
m.groups()
('010', '12345')
m.group(1)
'010'
m.group(2)
'12345'
用()表示的就是要提取的分組(Group),group(0)永遠(yuǎn)是原始字符串,group(1)、group(2)……表示第1、2、……個(gè)子串
(4)貪婪匹配
正則匹配默認(rèn)是貪婪匹配,也就是匹配盡可能多的字符。舉例如下,匹配出數(shù)字后面的0:
re.match(r'^(\d+)(0)$', '102300').groups()
('102300', '')
由于\d+采用貪婪匹配,直接把后面的0全部匹配了,結(jié)果0只能匹配空字符串了。
必須讓\d+采用非貪婪匹配(也就是盡可能少匹配),才能把后面的0匹配出來,加個(gè)?就可以讓\d+采用非貪婪匹配:
re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
(5)編譯
先編譯-后匹配,提高效率
import re
編譯:
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
使用:
re_telephone.match('010-12345').groups()
('010', '12345')
re_telephone.match('010-8086').groups()
('010', '8086')
三、實(shí)例
#郵箱匹配
import re
reemail = re.compile(r'^[0-9a-zA-Z][0-9a-zA-Z\.]+\@[0-9a-z]+.(com|cn|org|net)$')
m = re_email.match(email)
if m:
print "OK."
else:
print "You have input a wrong e-mail."
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。