認識正規表示式

2022-08-21 09:42:10 字數 2685 閱讀 6698

#正規表示式是乙個特殊字串行,能幫助使用者檢查乙個字串是否與某種模式匹配,從而達成快速檢索或替換符合某個模式、規則的文字。例如,可以在文件中使用乙個正規表示式表示式表示特定文字,然後將其全部刪除或替換成別的文字。

#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\s+d。該字串從左帶右解讀如下:

#\d表示匹配3個數字,如'010';\s可以匹配乙個空格(包括tab等空白符),所以\s+表示至少有乙個空格,如匹配' '、' '等;\d表示3~8個數字,如『1234567』。

#綜上所述,正規表示式可以匹配以任意個數的空格隔開的帶區號的**號碼。

#如果要匹配'010-12345'這樣的號碼呢?由於'-'是特殊字元,在正規表示式中要用'\'轉義,因此用正規表示式表示為\d\-\d。

#我們前面討論了正規表示式的基本使用方法,不過如果需要匹配帶有字串的字串('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\_]更精確地限制了變數的長度是1-20個字元(前面1個字元+後面最多19個字元)。

5)、a|b用於匹配a或b,如(p|p)ython可以匹配'python'或'python'。

6)、^表示行的開頭,^\d表示必須以數字開頭。

7)、$表示行的結束,\d$表示必須以數字結束。

認識正規表示式

正規表示式是處理字串的強大工具,擁有獨特的語法和獨特的處理引擎,效率可能不如str自帶的方法,但功能十分強大。特殊字元類子正規表示式中的應用 例項描述.匹配除 n 之外的任何單個字元。要匹配包括 n 在內的任意字元,請使用如 n 的模式 a匹配字串開始 b匹配乙個字邊界,即字與空格間的位置。b非字邊...

正規表示式學習筆記之一 簡單認識正規表示式

正規表示式是什麼東東?在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換句話說,正規表示式就是記錄文字規則的 很可能你使用過windows dos下用於檔案查詢的萬用字元 wildcard 也就是 和?如果你想查詢某個目錄下的所有的wor...

正規表示式學習筆記之一 簡單認識正規表示式

正規表示式是什麼東東?在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換句話說,正規表示式就是記錄文字規則的 很可能你使用過windows dos下用於檔案查詢的萬用字元 wildcard 也就是 和?如果你想查詢某個目錄下的所有的wor...