在這篇文章之中我們就來詳細介紹關於正規表示式進階的知識,以及我會來舉一些在python程式設計之中所可能會出現的問題而寫出來的正規表示式的範例。
第一個進階知識點:
#切分字串
用正規表示式切分字串比用固定的字元更靈活,請看正常的切分代碼:
>>> 'a b c'.split(' ') ['a', 'b', '', '', 'c']
嗯,無法辨識連續的空格,用正規表示式試試看:
>>> re.split(r'\s+', 'a b c') ['a', 'b', 'c']
無論多少個空格都可以正常分割。加入,試試:
>>> re.split(r'[\s\,]+', 'a,b, c d') ['a', 'b', 'c', 'd']
再加入;試試看:
>>> re.split(r'[\s\,\;]+', 'a,b;; c d') ['a', 'b', 'c', 'd']
如果使用者輸入了一組標籤,下次記得用正規表示式來把不規範的輸入轉換成正確的數組。
分組
除了簡單判斷是否符合之外,正規表示式還有擷取子字串的強大功能。用()表示的就是要提取的分組(Group)。例如:
^(\d{3})-(\d{3,8})$分別定義了兩個群組,可以直接從符合的字串中提取出區號和本地號碼:
>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') >>> m <_sre.SRE_Match object; span=(0, 9), match='010-12345' >>>> m.group(0) '010-12345' >>> m.group(1) '010' >>> m.group(2) '12345'
如果正規表示式中定義了群組,就可以在Match物件上用group()方法提取子字串來。
注意到group(0)永遠是原始字串,group(1)、group(2)…表示第1、2、…個子字串。
提取子字串非常有用。來看一個更兇殘的例子:
>>> t = '19:05:30' >>> m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9] |2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t) >>> m.groups() ('19', '05', '30')
這個正規表示式可以直接辨識合法的時間。但有些時候,用正規表示式也無法做到完全驗證,例如辨識日期:
'^(0[1-9]|1[0-2]|[0-9])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]|[0-9])$'
對於'2-30','4-31'這樣的非法日期,用正規還是識別不了,或者說寫出來非常困難,這時就需要程序配合識別了。
以上就是本篇文章所講述的所有內容,這篇文章主要介紹了相關於python中正則表達式的知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。
更多相關知識,請造訪php中文網Python教學欄位。
以上是python之中正規表示式詳解(實例分析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!