心靈雞湯電影推薦:正則表達式
阿甘正傳、辛德勒名單、肖申克的救贖、勇敢的心、角鬥士、美國麗人、教父、鋼琴師、指環王、西雅圖不眠夜、廊橋遺夢、可可西里的美麗傳說、放牛班的春天、血鑽、戰爭之王、上帝之城、中央車站、猜火車、低俗小說、華爾街之狼spa
程序的解耦code
模塊ci
正則表達式字符串
import restring
re.match('','')全匹配it
re.search('','')任意部分匹配class
re.findall('','')查全部import
re.split('','') 分割程序
re.sub('','','') 替換 re.sub('[0-9]+','|',"adfadf12131adfas13f1ds3f13a")
正則表達式特殊符號意義:
‘.’ 默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
‘^’ 匹配字符開頭,若指定flag MULTILINE,這種也能夠匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$' 匹配字符結尾,另同上
'*' 匹配*前的字符0次或屢次 re.findall(「ab*」,"cabb3abcbbac") 結果爲["abb","ab","a"]
'+' 匹配前一個字符1次或屢次 re.findall("ab+","ab+cd+abb+bba") 結果爲["ab","abb"]
'?' 匹配前一個字符1次或0次
‘{m}’ 匹配前一個字符m次
‘{n,m}’ 匹配前一個字符n到m次 re.findall("ab{1,3}","abb abc abbcbbb") 結果爲['abb','ab','abb']
'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果爲「ABC」
‘(...)’ 分組匹配 re.search("(abc){2}a(123|456)c",「abcabca456c」」).group() 結果 abcabca456c
'\A' 只從字符開頭匹配, re.search("\Aabc","alexabc") 結果是匹配不到的
'\Z' 匹配字符結尾,同$
'\d' 匹配數字0-9
‘\D’ 匹配非數字
'\w' 匹配[A-Za-z0-9]
'\W' 匹配非[A-Za-z0-9]
'\s' 匹配空白字符、\t、\n、\r,re.search("\s+","ab\tc1\n3").group() 結果爲 ’\t
匹配反斜槓的困擾:
特殊標記的含義:
flags=re.I 忽略大小寫
flags=re.M 表示將字符串視爲多行,從而^匹配每一行的行首,$匹配每一行的行尾
flags=re.S 表示.的做用包括換行符
import re
a = '''asdfsafhellopass: 234455 worldafdsf '''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c
運行結果以下:
b is []
c is ['pass:\n\t234455\n\t']
做業:本身寫一個計算器,要求將一個字符串形式的公式放進去,直接能算出結果來,整個計算器的優先級、加減乘除運算都要本身寫代碼去完成。