正規表示式

2021-10-13 07:33:33 字數 3242 閱讀 9699

什麼是正規表示式

正規表示式是字串處理的有力工具,比字串自身提供的方法提供了更強大的處理功能。

例如判斷乙個字串是否是合法的email位址,可以通過構造乙個規則(正規表示式),去判斷字串是否能夠匹配。

正規表示式,又稱正規表示式、正規表示法、正規表示式、規則表示式、常規表示法(英語:regular expression,在**中常簡寫為regex、regexp或re),電腦科學的乙個概念。

正規表示式使用單個字串來描述、匹配一系列匹配某個句法規則的字串。

在很多文字編輯器裡,正規表示式通常被用來檢索、替換那些匹配某個模式的文字。

re模組

python通過re模組提供對正規表示式的支援。

使用re的一般步驟是先將正規表示式的字串形式編譯為pattern例項

然後使用pattern例項處理文字並獲得匹配結果(乙個match例項)

最後使用match例項獲得資訊,進行其他的操作。

re.match函式

re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match()就返回none。

re.match(pattern, string, flags=0)

re.search方法

re.search 掃瞄整個字串並返回第乙個成功的匹配

re.search(pattern, string, flags=0)

re.match與re.search的區別

re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回none

而re.search匹配整個字串,直到找到乙個匹配。

compile 函式

compile 函式用於編譯正規表示式,生成乙個正規表示式( pattern )物件,供 match() 和 search() 這兩個函式使用。

re.compile(pattern[, flags])

findall

在字串中找到正規表示式所匹配的所有子串,並返回乙個列表,如果沒有找到匹配的,則返回空列表。

注意:?match 和 search 是匹配一次 findall 匹配所有。

findall(string[, pos[, endpos]])

string?待匹配的字串。

pos?可選引數,指定字串的起始位置,預設為 0。

endpos?可選引數,指定字串的結束位置,預設為字串的長度

re.finditer

在字串中找到正規表示式所匹配的所有子串,並把它們作為乙個迭代器返回

re.finditer(pattern, string, flags=0)

re.split

split 方法按照能夠匹配的子串將字串分割後返回列表,它的使用形式如下:

re.split(pattern, string[, maxsplit=0, flags=0])

re.sub

sub(pattern, repl, string, count=0, flags=0)

替換函式,將正規表示式 pattern 匹配到的字串替換為 repl 指定的字串, 引數 count 用於指定最大替換次數

元字元貪婪 vs 不貪婪

當重複乙個正規表示式時,如用 a*,操作結果是盡可能多地匹配模式。 .* 的本質是「貪婪」的

在這種情況下,解決方案是使用不貪婪的限定符 *?、+?、?? 或 ?,盡可能匹配小的文字。

正規表示式集錦

最簡單的正規表示式是普通字串,可以匹配自身

『[pjc]ython』可以匹配』python』、『jython』、『cython』

'[a-za-z0-9]'可以匹配乙個任意大小寫字母或數字

『[^abc]『可以乙個匹配任意除』a』、『b』、『c』之外的字元

『python|perl』或』p(ython|erl)『都可以匹配』python』或』perl』

子模式後面加上問號表示可選。r』(http://)?(www.)?python.org』只能匹配』和』python.org』

『^http』只能匹配所有以』http』開頭的字串

(pattern):允許模式重複0次或多次

(pattern)+:允許模式重複1次或多次

(pattern):允許模式重複m~n次

『(a|b)c』:匹配多個(包含0個)a或b,後面緊跟乙個字母c。

『ab』:等價於』ab+』,匹配以字母a開頭後面帶1個至多個字母b的字串。

『1([a-za-z0-9._])katex parse error: undefined control sequence: \w at position 50: …_」、「.」的字串。 '^(\̲w̲)』:匹配長度為6-20的字串,可以包含字母、數字、下劃線。

『^\d.\d.\d.\dkatex parse error: undefined control sequence: \d at position 31: …p位址。 '^(13[4-9]\̲d̲)|(15[01289]…』:檢查給定字串是否為移動手機號碼。

『2+katex parse error: undefined control sequence: \w at position 26: …否只包含英文本母大小寫。 '^\̲w̲+@(\w+\.)+\w+』:檢查給定字串是否為合法電子郵件位址。

r』(\w)(?!.\1)』:查詢字串中每個字元的最後一次出現。

r』(\w)(?=.\1)』:查詢字串中所有重複出現的字元。

『^(-)?\d+(.\d)?katex parse error: can't use function '\u' in math mode at position 31: …有2位小數的正數或負數。 '[\̲u̲4e00-\u9fa5]':匹…』:檢查給定字串是否為合法身份證格式。

『\d-\d-\d』:匹配指定格式的日期,例如2016-1-31。

『^(?=.[a-z])(?=.[a-z])(?=.\d)(?=.[,._]).$』:檢查給定字串是否為強密碼,必須同時包含英語字母大寫字母、英文小寫字母、數字或特殊符號(如英文逗號、英文句號、下劃線),並且長度必須至少8位。

"(?!.*[』"/;=%?]).+":如果給定字串中包含』、」、/、;、=、%、?則匹配失敗。

『(.)\1+』:匹配任意字元的一次或多次重複出現。

『((?p\b\w+\b)\s+(?p=f))』:匹配連續出現兩次的單詞。

『((?p.)(?p=f)(?p

.)(?p=g))』:匹配aabb形式的成語或字母組合。

a-za-z ↩︎

a-za-z ↩︎

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...