1. 程式人生 > >正則 re模組

正則 re模組

re.match   匹配字串的開始,如果不符合則返回None

re.match(pattern, string, flags=0)  

>>> re.match('[a-z]','1aaa')     # 沒匹配到返回None
>>> re.match('[a-z]','a1aaa')
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match('[a-z]','a1aaa').group()   #group()匹配到的字串
'a'
>>> re.match('
[a-z]','a1aaa').span() (0, 1)

re.search  匹配整個字串,直到找到一個匹配

>>> re.search('[a-z]','1aaa')
<_sre.SRE_Match object; span=(1, 2), match='a'>

 

re.sub    查詢替換

re.sub(pattern, repl, string, count=0)

>>> re.sub(r'[^a-z]','*','ab11cd22ef33')
'ab**cd**ef**
' >>> re.sub('\D','*','ab11cd22ef33') '**11**22**33'

 

compile 函式     編譯正則表示式。

re.compile(pattern[, flags])

flags:匹配模式 re.I 忽略大小寫  re.M 多行模式等

>>> pattern = re.compile(r'\D+')
>>> pattern.search('ab-11cd22ef33').group()
'ab-'
>>> pattern.search('
ab-11cd22ef33',0,2).group() 'ab' >>> >>> pattern.search('ab-11cd22ef33').start() 0 >>> pattern.search('ab-11cd22ef33').end() 3 >>> pattern.search('ab-11cd22ef33').span() (0, 3)

 

findall  匹配所有符合正則的字串,以列表形式返回

>>> re.findall('[a-z]','ab11cd22ef33')   #匹配所有符合正則的字串,並返回列表
['a', 'b', 'c', 'd', 'e', 'f']
>>> re.findall('[a-z]','123456')    #沒有匹配到則返回空列表
[]
>>> pat = re.compile(r'\d+')
>>> pat.findall('aa 12 bb34 de')
['12', '34']
>>> pat.findall('aa 12 bb34 de56')
['12', '34', '56']
>>> 
>>> pat.findall('aa 12 bb34 de56',0,5)   
['12']

finditer   類似findall 將結果作為一個迭代器返回

>>> pattern = re.compile(r'\D+')
>>> i = pattern.finditer('ab-11cd22ef33')
>>> i
<callable_iterator object at 0x7f8fc4d38908>
>>> for x in i:
...      print(x)
... 
<_sre.SRE_Match object; span=(0, 3), match='ab-'>
<_sre.SRE_Match object; span=(5, 7), match='cd'>
<_sre.SRE_Match object; span=(9, 11), match='ef'>

split   按照正則匹配的子串將字串分割並返回列表

>>> re.split(r'\*','a*b*c')
['a', 'b', 'c']