首頁 >後端開發 >Python教學 >python之中正規表示式詳解(實例分析)

python之中正規表示式詳解(實例分析)

乌拉乌拉~
乌拉乌拉~原創
2018-08-22 16:54:001192瀏覽

在這篇文章之中我們就來詳細介紹關於正規表示式進階的知識,以及我會來舉一些在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=&#39;010-12345&#39;
>>>> m.group(0)
&#39;010-12345&#39;
>>> m.group(1)
&#39;010&#39;
>>> m.group(2)
&#39;12345&#39;

如果正規表示式中定義了群組,就可以在Match物件上用group()方法提取子字串來。

注意到group(0)永遠是原始字串,group(1)、group(2)…表示第1、2、…個子字串。

提取子字串非常有用。來看一個更兇殘的例子:

>>> t = &#39;19:05:30&#39;
>>> m = re.match(r&#39;^(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])$&#39;, t)
>>> m.groups()
(&#39;19&#39;, &#39;05&#39;, &#39;30&#39;)

這個正規表示式可以直接辨識合法的時間。但有些時候,用正規表示式也無法做到完全驗證,例如辨識日期:

&#39;^(0[1-9]|1[0-2]|[0-9])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]|[0-9])$&#39;

對於'2-30''4-31'這樣的非法日期,用正規還是識別不了,或者說寫出來非常困難,這時就需要程序配合識別了。

以上就是本篇文章所講述的所有內容,這篇文章主要介紹了相關於python中正則表達式的知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。

更多相關知識,請造訪php中文網Python教學欄位。

以上是python之中正規表示式詳解(實例分析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多