Python初學者(五),python初學者
十四、Regex
Regex是用於處理字串的功能強大的工具,但它並不是Python所專屬的,許多程式設計語言都支援Regex,用法也都區別不大;
Python中的Regex在re模組中;
Python中的數量詞預設是貪婪的,總是嘗試匹配儘可能多的字元;非貪婪的則相反,總是嘗試匹配儘可能少的字元(例如:Regex"ab*"如果用於尋找"abbbc",將找到"abbb";而如果使用非貪婪的數量詞"ab*",將找到"a"。);
與大多數程式設計語言相同,Regex裡使用"\"作為逸出字元,這就可能造成反斜線困擾。假如你需要匹配文本中的字元"\",那麼使用程式設計語言表示的Regex裡將需要4個反斜線"\\\\":前兩個和後兩個分別用於在程式設計語言裡轉義成反斜線,轉換成兩個反斜線後再在Regex裡轉義成一個反斜線。Python裡的原生字串很好地解決了這個問題,這個例子中的Regex可以使用r"\\"表示。
(本文Regex部分大部分借鑒於http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html,若有錯,歡迎指正)
下面介紹re模組中的幾個常用方法:
>>> import re>>> pattern = re.compile('python') # compile將字串當做Regex來編譯>>> result = pattern.search('hello python!')>>> result<_sre.SRE_Match object; span=(6, 12), match='python'>>>> result.group()'python'>>> >>> result = re.match('a', 'abc') # match是從字串的開頭開始匹配>>> result<_sre.SRE_Match object; span=(0, 1), match='a'>>>> result.group() # 並不直接返回匹配成功的字串,需要使用group()方法'a'>>> result = re.match('a', 'dabc')>>> result>>> result.group() # 沒有匹配成功Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> result.group()AttributeError: 'NoneType' object has no attribute 'group'>>> >>> result = re.search('python', 'abcpythondef') # 在字串的全文中搜尋匹配,同樣也不會直接返回匹配成功的字串>>> result<_sre.SRE_Match object; span=(3, 9), match='python'>>>> result.group()'python'>>> >>> result = re.findall('python', 'abc python def python ghi')>>> result['python', 'python']>>> >>> result = re.sub('c', 'z', 'click', 1) # 使用匹配成功的字串替換成指定的字串,參數依次為Regex,匹配成功後要去替換的字串,原字串,替換次數>>> result # 返回替換後的字串'zlick'>>> >>> result = re.split('a', '1a2a3a4guyuyun') # 將匹配成功的字串用作字串分隔符號,返回分隔後的字串列表>>> result['1', '2', '3', '4guyuyun']>>>