正規表示式是一種匹配字串的工具。python中通過匯入re來實現。
規則:
| | |
tables
含義\d
可以匹配乙個數字
\w匹配乙個字母或數字
.匹配任意字元
*任意個字元(包括0個)
+表示至少乙個字元
?表示0個或1個字元
表示n個字元
表示至少匹配n次
表示n-m個字元
\s匹配乙個空格(也包括tab等空白符),\s+表示至少有乙個空格
^表示行的開頭
$表示行的結尾
還有一些用法,
「[ ]」:例如數字除了用\d表示之外,還能用[0-9], 字母也可以寫成[a-za-z]表示其中的任意乙個。
舉例:
import re
>>> re.match(r'^\d\-\d$', '010-12345')
<_sre.sre_match object; span=(0, 9), match='010-12345'> #表示匹配成功
>>> re.match(r'^\d\-\d$', '010 12345') #沒有輸出表示匹配失敗
>>>
有一種情況需要注意
>>> re.match(r'^\d+', '01a3')
<_sre.sre_match object; span=(0, 2), match='01'>
我們希望』^\d+』匹配任意個數字,但實際結果卻能跟』01a3』匹配上了。match=』01』由此說明』^\d+』匹配的是任意以數字開頭的字元,不能保證後續的也是數字。所以正確的方式如下:
>>> re.match(r'^\d+$', '01a345') #後面要加乙個$,這樣就能保證所有的字串都是數字。
>>>
分組:正規表示式還有提取子串的功能。用()表示的就是要提取的分組
>>> m = re.match(r'^(\d)-(\d)$', '010-12345')
>>> m
<_sre.sre_match object; span=(0, 9), match='010-12345'>
>>> m.group(0) #group(0)始終表示原始配對的項
'010-12345'
>>> m.group(1) #第乙個括號裡的內容
'010'
>>> m.group(2) #第二個括號的內容
'12345'
最後舉個例項,劍指offer中的乙個題,判斷乙個字串是否是數字。
題目:請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串」+100」,」5e2」,」-123」,」3.1416」和」-1e-16」都表示數值。 但是」12e」,」1a3.14」,」1.2.3」,」+-5」和」12e+4.3」都不是。
「^[-+]?[0-9]*(.?[0-9]+)?([ee][-+]?[0-9]+)?$」
這個題可以用正規表示式來實現。分為如下幾步:
1.正負號的判斷:乙個數可以存在正負號,也可以不存在。所以我們要用到」?」,同時正負號是只能有乙個,是「或」的關係,所以用「[ ]」。最終這一部分的形式為:「^[\-\+]?」或者「^[-+]?」。」^」表示以這個為開頭,-和+是有含義的,所以需要用」\」轉置,我測試過,當這些符號在」[ ]」裡面也是可以不用轉義的。
2.整數部分判斷:整數部分也可能是不存在的,eg 「.98」就表示0.98.所以最終形式為:「[0-9]*」。因為」 * 「限定了[0-9]是可以為0個或任意多個。
3.小數部分判斷:小數部分也是可能出現的。但是只要有小數點出現,那麼後面必須會跟上數字,這個時候「( )」就派上用場了。「(\.[0-9]+)?」。這裡的數字判斷就要用上「+」,表示至少有乙個數字,「?」限定的範圍是整個「( )」。
4.指數部分判斷:這一部分與上一部分類似,「([ee][-+]?[0-9]+)?$」,[ee]後面有可能存在「-+」,所以多了」[+-]?」這部分的判斷。同時還有很重要的一點,就是一定要加上「$」,正則式的匹配是以只要能找到pattern的部分就返回值。
完整的表示式為:
pattern = 「^[-+]?[0-9]*(\.[0-9]+)?([ee][-+]?[0-9]+)?$」
re.match(p, s)
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...
Python 正規表示式
1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...
Python正規表示式
學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...