1. 程式人生 > >認識正則表達式

認識正則表達式

創建 family 如何使用 style email地址 電話號碼 有一個 -a 數字

#正則表達式是一個特殊字符序列,能幫助用戶檢查一個字符串是否與某種模式匹配,從而達成快速檢索或替換符合某個模式、規則的文本。例如,可以在文檔中使用一個正則表達式表達式表示特定文字,然後將其全部刪除或替換成別的文字。 #Python自1.5版本起增加了re模塊,它提供了perl風格的正則表達式模塊,re模塊使Python語言擁有全部的正則表達式功能。compile函數根據一個模式字符串和可選的標誌參數生成一個正則表達式對象,該對象擁有一系列方法用於正則表達式匹配和替換。 #re模塊提供與compile的函數功能完全一致的函數。這些函數使用模式字符串作為第一個參數。 #字符串是編程時設計最多的數據結構,對字符串操作的需求幾乎無處不在。 #在開始後續介紹前,我們先看表1和表2,表1展示了一下特殊字符在正則表達式的獨特應用,表2展示某些字符類在正則表達式中的應用。                                 表1-特殊字符類在正則表達式中的應用
實例 描述
. 匹配除“\n”之外的任何單個字符。要匹配包括“\n”在內的任意字符,請使用如“[.\n]”的模式
\d 匹配一個數字字符,等價於[0-9]
\D 匹配一個非數字字符,等價於[^0-9]
\s 匹配任意空白字符,包括空格、制符表、換頁符等,等價於[\f\n\r\t\v]
\S 匹配任意非空白字符,等價於[^\f\n\r\t\v]
\w 匹配包括下劃線的任意單詞字符,等價於‘[A-Za-z0-9_]’
\W 匹配任意非單詞字符,等價於‘[^A-Za-z0-9_]‘
                              表2-字符類在正則表達式中的應用
實例 描述
[Pp]ython 匹配“Python”或“python”
rub[ye] 匹配“ruby”或“rube”
[aeiou] 匹配中括號內的任意一個字母
[0-9] 匹配任意數字,類似於[0123456789]
[a-z] 匹配任意小寫字母
[A-Z] 匹配任意大寫字母
[a-zA-Z0-9] 匹配任意字母和數字
[^aeiou] 除了aeiou字母以外的所有字符
[^0-9] 匹配除了數字外的字符
#通過表1和表2可以看到,一些特殊字符雖然很簡短,但功能非常強大。下面介紹一些更詳盡的正則表達式的使用方式。 #例如,我們要判斷一個字符串是否合法的Email地址,可以用編程的方式提取@前後的子串,再分別判斷是否是單詞和域名。不過這樣做不但需要寫一堆麻煩的代碼,而且寫處理的代碼難以重復使用,面對不同的需求可能需要使用不同的代碼實現。 #正則表達式是匹配字符串的強有力的武器。正則表達式的設計思想使用描述性語言為字符串定義一個規則,凡是符合規則的字符串,我們就認為“匹配”,否則就不匹配。正則表達式的大致匹配過程是:依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,匹配就成功:一旦有匹配不成功的字符,匹配就失敗。 #用正則表達式判斷一個字符串是否是合法的Email的方法是: ①:創建一個匹配Email的正則表達式。 ②:用該正則表達式匹配用戶的輸入從而判斷是否合法。 #下面我們介紹如何使用正則表達式描述字符。 #在正則表達式中,如果直接給出字符,就是精確匹配。從表1可知,用\d可以匹配一個數字,用\w可以匹配一個字母或數字,例如: 1)、‘00\d‘可以匹配‘007’,但無法匹配‘00q’。 2)、‘\d\d\d‘可以匹配‘123‘。 3)、‘\w\w\d‘可以匹配‘py3‘。 4)、.可以匹配任意字符,所以‘py.‘可以匹配‘pyc‘、‘pyo‘、‘py!‘等。 #在正則表達式中,要匹配變長的字符,用*表示任意個數的字符(包括0個),用+表示至少一個字符,用?表示0個或1個字符,用{n}表示n個字符,用{n,m}表示n~m個字符。 #下面我們來看一個更復雜的例子:\d{3}\s+d{3,8}。該字符串從左帶右解讀如下: #\d{3}表示匹配3個數字,如‘010‘;\s可以匹配一個空格(包括Tab等空白符),所以\s+表示至少有一個空格,如匹配‘ ‘、‘ ‘等;\d{3,8}表示3~8個數字,如‘1234567’。 #綜上所述,正則表達式可以匹配以任意個數的空格隔開的帶區號的電話號碼。 #如果要匹配‘010-12345‘這樣的號碼呢?由於‘-‘是特殊字符,在正則表達式中要用‘\‘轉義,因此用正則表達式表示為\d{3}\-\d{3,8}。 #我們前面討論了正則表達式的基本使用方法,不過如果需要匹配帶有字符串的字符串(‘010-12345‘),前面使用的方式就做不到了,在此我們繼續討論一下更復雜的匹配方式。 #要更精確地匹配,可以用[]表示範圍,例如: 1)、[0-9a-zA-Z\_]用以匹配數字、字母或下劃線,這種方式可以在一些場合做輸入值或命名的合法性檢驗。 2)、[0-9a-zA-Z\_]+可以匹配至少由一個數字、字母或下劃線組成的字符串,如‘a100‘‘0_Z‘‘Py3000‘。這種方式可以檢驗一個字符串是否包含數字、字母或下劃線。 3)、[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下劃線開頭,後接任意個數字、字母或下劃線組成的字符串,也就是Python的合法變量。 4)、[a-zA-Z\_][0-9a-zA-Z\_]{0,19}更精確地限制了變量的長度是1-20個字符(前面1個字符+後面最多19個字符)。 5)、A|B用於匹配A或B,如(P|p)ython可以匹配‘Python‘或‘python‘。 6)、^表示行的開頭,^\d表示必須以數字開頭。 7)、$表示行的結束,\d$表示必須以數字結束。

認識正則表達式