什麼是正規表示式
正規表示式是字串處理的有力工具,比字串自身提供的方法提供了更強大的處理功能。
例如判斷乙個字串是否是合法的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正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...