正規表示式是搜尋、取代和解析複雜字串的一種強大而標準的方法,Python中的正規相關的東西全在re模組下。
1 常用的匹配
^匹配字串的開始
$匹配字串的結尾
b匹配一個單字的邊界
d匹配任意數字
?D匹配一個非數字字符d匹配任意數字?一個匹配一個
可選的x(符合1次或0次x字元)x*符合0次或多次xx+符合1次或多次xx{n,m}至少n次,至多m次x(a|b|c)要么匹配a,要么匹配b,要么匹配c(x)一般情況下表示一個記憶組,你可以利用re.search函數返回對象的groups()函數來獲取它的值2 一般用途#------------------------------------------------------------------------------- # coding: utf-8 # Purpose:正则表达式 # # Author: zdk # # Created: 26/02/2013 # Copyright: (c) zdk 2013 #------------------------------------------------------------------------------- import re if __name__ == '__main__': addr = "100 BROAD ROAD APT.3" print(re.sub("ROAD","RD",addr)) # 100 BRD RD APT.3 print(re.sub(r"\bROAD\b","RD",addr)) # 100 BROAD RD APT.3 pattern = ".*B.*(ROAD)?" print(re.search(pattern,"ROAD")) #None print(re.search(pattern,"B")) #<_sre.SRE_Match object at 0x0230F020><span style="background-color:#FAFAFA;font-family:Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;font-size:1em;line-height:1.5;"> </span>
#松散带有内联注释的正则表达式 pattern = """ ^ # begin of string M{0,3} # 0 to 3 M (CM|CD|D?C{0,3}) #CM or CD or D or D 0 to 3 C $ #end of string """ print(re.search(pattern,"MCM",re.VERBOSE)) #<_sre.SRE_Match object at 0x021BAF60> print(re.search(pattern,"M99",re.VERBOSE)) #None
多,我們需要知道的是800為區號,幹線號為555,電話號的其他數字為1212,對於有分機號的,我們需要知道分機號為1234
phonePattern = re.compile(r''' # don't match beginging of string (\d{3}) # 3 digits \D* #any number of non-digits (\d{3}) # 3 digits \D* #any number of non-digits (\d{4}) # 4 digits \D* #any number of non-digits (\d*) #any number of digits ''',re.VERBOSE) print(phonePattern.search('work 1-(800)555.1212 #1234').groups()) #('800', '555', '1212', '1234')