標籤:python Regex re
一.re模組的常用方法:
re.findall() 用於返回一個字串中,所有能被Regex所匹配到的字串,以列表的方式返回。
用法re.findall(Regex,字串)。
s1 = "sadjhjafdsajkhjsdaysadsadduayu"
比如說,想要從上面這一長串字串中,匹配出a後面有一個任一字元在緊接著一個字母u的字串。
print re.findall(‘a.u‘,s1)
>>>[‘ayu‘]
re.finditer()作用和findall一樣,不過finditer返回的並不是個列表,而是個迭代器對象,如果需要迭代操作,推薦使用finditer方法。
re.search() 在字串中按照Regex去尋找匹配所需要的字串,只找第一個匹配到的結果,然後返回一個match對象,這個對象中包含了,通過Regex匹配的資訊,我們可以通過執行該對象.group方法去擷取所匹配到的字串,如果找到想匹配的字串,就回返回一個None。
用法:re.search(Regex,字串,flag)
s1 = "hamasaki ayumi"
print re.search(‘a.u‘,s1).group()
>>>ayu
re.match()字串中按照Regex去尋找匹配所需要的字串,和search不同的是match只會從字串的開頭進行匹配!如果字串開始不符合Regex,則匹配失敗!
用法和search是一樣的。
re.split()按照指定的Regex去拆分字串。
例:
以所有的字串做為分隔字元。
s = "a1b2c3d4e5"
print re.split(r‘\d‘,s)
>>>[‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘‘]
re.sub()替換,使用Regex匹配出字串中的指定內容,然後將其替換成指定的字串。
s = "a1b2c3d4e5"
print re.sub(r‘[a-z]‘,‘ayu‘,s)
>>>ayu1ayu2ayu3ayu4ayu5
re.sub()函數還有個參數,可以設定替換多少次。
比如說,只想替換前三個匹配到的。
s = "a1b2c3d4e5"
print re.sub(r‘[a-z]‘,‘ayu‘,s,3)
>>>ayu1ayu2ayu3d4e5
re.subn() 和sub一樣,都是通過正則來替換字串內容的功能,但是subn會返回一個元組,這個元組裡不單單只有替換後的字串,還包含了這個字串中的內容被替換了幾次。
例如:
s = "a1b2c3d4e5"
print re.subn(r‘[a-z]‘,‘ayu‘,s)
>>>(‘ayu1ayu2ayu3ayu4ayu5‘, 5)
re.compile() 編譯,可以把Regex編譯成一個Regex對象。可以把那些經常使用的Regex編譯成Regex對象,這樣可以提高一定的效率。
二.pythonRegex之分組。
python中正則常用的分組方式大概分為兩種。
方法1:
print re.search(r‘(^\d{3,4})-(\d{3,8})‘,‘010-123456‘).group(0)
>>>010-123456
print re.search(r‘(^\d{3,4})-(\d{3,8})‘,‘010-123456‘).group(1)
>>>010
print re.search(r‘(^\d{3,4})-(\d{3,8})‘,‘010-123456‘).group(2)
>>>123456
如果Regex中定義了組,就可以在Match對象上用group()方法提取出子串。
注意到group(0)永遠是原始字串,group(1)、group(2)……表示第1、2、……個子串。
方法2:
命名分組
print re.search(r‘(?P<zone_num>^\d{3,4})-(?P<phone_num>\d{3,8})‘,‘010-123456‘).group("zone_num")
>>>010
print re.search(r‘(?P<zone_num>^\d{3,4})-(?P<phone_num>\d{3,8})‘,‘010-123456‘).group("phone_num")
>>>123456
本文出自 “reBiRTH” 部落格,請務必保留此出處http://suhaozhi.blog.51cto.com/7272298/1910537
7.python之Regexre模組