python 正則表達式(RE)筆記1
compile(pattern , flags=0) 函數 ,對正則表達式pattern進行編譯,並返回一個正則表達式(regex)對象,返回的對象可供match() ,search()等函數使用,flags是標誌位,用於控制是否忽略大小寫等
1 pattern = re.compile(‘ac‘) 2 3 reval = pattern.findall(‘aksdjaaclkasldjaksjdaclkjlkj‘) 4 5 print reval
輸出結果為:
[‘ac‘ , ‘ac‘]
=======分割線===============================================
pattern = re.comile(‘ac‘) #使用match()函數從字符串行頭開始匹配 ,如果匹配成功就返回一個匹配對象,否則返回None ,返回的匹配對象的group()方法用以輸出匹配成功的值 reobj = pattern.match(‘aclalskdjsallasd‘) reobj.group()
輸出結果為:
‘ac‘
pattern = re.compile(‘ac‘) reobj = pattern.match(‘asdadsa‘) if reobj is None: print ‘None‘ else: print ‘value‘
輸出結果為:
‘None‘
=======分割線===============================================
pattern = re.compile(‘ac‘) #使用search()函數在字符串中搜索一個模式 , 與match()函數不同,match()函數是從字符串的頭部開始匹配,如果頭部不匹配,則直接返回None。
#不再繼續後續的字符匹配,search()函數是在整個字符串中進行搜索匹配,直到找到一個與模式匹配的值或整個字符串沒有與模式匹配的值,到整個字符串結束標記返回None reobj = pattern.search(‘asdajdhjsaacklasdlalsaac asdlsaac‘) reobj.group()
輸出結果為:
‘ac‘
pattern = re.compile(‘ac‘) reobj = pattern.search(‘asdajsajksaaksjsaj‘) if reobj is None: print ‘None‘ else: print ‘value‘
輸出結果為:
‘None‘
=======分割線===============================================
match(pattern, string , flags = 0) 函數嘗試用正則表達式pattern匹配字符串string,flags是可選的標誌位,如果匹配成功則返回一個匹配對象,否則返回None
m = re.match(‘foo‘ , ‘food‘) #模式匹配 if m is None: #如果成功則輸出匹配 print ‘fail‘ else: print m.group()
輸出結果為:
‘foo‘
m = re.match(‘foo‘ , ‘bar‘) #模式不匹配 if m is None: print ‘fail‘ else: print m.group()
輸出結果為:
‘fail’
使用管道符號(|)匹配多個字符串
words = ‘bit|bar|foo‘ m = re.match(words , ‘bit‘) m.group() #輸出結果為:‘bit‘ m = re.match(words , ‘foo‘) m.group() #輸出結果為:‘foo‘ m = re.match(words , bar) m.group() #輸出結果為:‘bar‘
=======分割線===============================================
search(pattern , string , flags=0)在字符串string中搜索正則表達式模式pattern的第一次出現,flags是可選標識符 , 如果匹配成功,則返回一個匹配對象, 否則返回None
m = re.search(‘ac‘ , ‘aksjdaackhkjhakjdac‘) m.group() #輸出結果為:‘ac‘ m.start() #輸出結果為:6 m.end() #輸出結果為:8
使用管道符號(|)搜索多個字符串
words = ‘bit|gm|ga‘ m = re.search(words , ‘ajkskdabitlasgm‘) m.group() #輸出結果為:‘bit‘ m = re.search(words , ‘askjaksjgmasjdsabitasaga‘) m.group() #輸出結果為:‘gm‘ m = re.search(words , ‘adga00gmajksdsabit‘) m.group() #輸出結果為:‘ga‘
=======分割線===============================================
findall(pattern , string , flags)在字符串string中搜索正則表達式模式pattern的所有(非重復)出現,返回一個匹配的列表
m = re.findall(‘ac‘ , ‘aksdsajkacaldasldaaclaksdjaljaac‘) print m #輸出結果為[‘ac‘ ,‘ac‘]
使用管道符號(|)查找多個字符串模式
words = ‘dog|cat|fish‘ str = ‘aajkdaaaksjddogkjasdskacatasjkdafisherasjdog‘ m = re.findall(words , str) print m #輸出結果為:[‘dog‘ , ‘cat‘ , ‘fish‘ ,‘dog‘]
=======分割線===============================================
finditer(pattern , string , flags) 與findall()相同,但返回的不是列表而是叠代器,對每個匹配,該叠代器返回一個匹配對象
m = re.finditer(‘abs‘ , ‘askjdaabsjsakhdkaabslsadabsds‘) for i in m: i.group() #輸出結果為:‘abs‘ # ‘abs‘ # ‘abs‘
使用管道符號(|)查找多個字符串模式
words = ‘dog|fish‘ m = re.finditer(words , ‘this is my dog , the gold fish is beautiful‘) for i in m: i.group() #輸出結果為:‘dog‘ , ‘fish‘
=======分割線===============================================
split(pattern , string ,max = 0 ) 根據正則表達式pattern中的分隔符把字符串string分割為一個列表,返回成功匹配的列表,最多分割max次(默認是分割所有匹配的地方)
m = re.split(‘tab‘ ,‘asdsatabadtaladtabhero‘) print m #輸出結果為:[‘asdsa‘ , ‘adtalad‘ , ‘hero‘ ]
通過管道符號(|)使用多個分隔符
words = ‘tab|sp‘ str = ‘asdstabajsdspajsatabajksdspd‘ m = re.split(words , str) print m #輸出結果為:[‘asds‘ , ‘ajsd‘ , ‘ajsa‘ , ‘ajksd‘ , ‘d‘]
=======分割線===============================================
sub(pattern , repl , string , max= 0) 把字符串string中所有匹配正則表達式pattern的地方替換成字符串repl, 最多替換max次,默認對所有匹配的地方進行替換,返回一個已經替換的新字符串。
char = ‘a‘ repl = ‘b‘ str = ‘asdsaa‘ m = re.sub(char , repl , str) print m #輸出結果為:bsdsbb m = re.sub(char ,repl , str , 1) #最大替換次數為1 print m #輸出結果為:bsdsaa
通過管道符號(|)對多個正則表達式模式進行替換
char = ‘a|t‘ repl = ‘w‘ str = ‘asdjtsdjtsdsa‘ m = re.sub(char , repl , str) print m #輸出結果為:wsdjwsdjwsdsw
python 正則表達式(RE)筆記1