re模組的使用過程
#coding=utf-8
# 匯入re模組
import re
# 使用match方法進行匹配操作
result = re.match(r""正規表示式,""要匹配的字串 )
# 如果上一步匹配到資料的話,可以使用group方法來提取資料
result.group()
re.match() 能夠匹配出以***開頭的字串
匹配單個字元
字元 功能
. 匹配任意1個字元(除了\n)
[ ] 匹配[ ]中列舉的字元
\d 匹配數字,即0-9
\d 匹配非數字,即不是數字
\s 匹配空白,即 空格,tab鍵
\s 匹配非空白
\w 匹配單詞字元,即a-z、a-z、0-9、_
\w 匹配非單詞字元
匹配多個字元
字元 功能
* 匹配前乙個字元出現0次或者無限次,即可有可無
+ 匹配前乙個字元出現1次或者無限次,即至少有1次
? 匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有
匹配前乙個字元出現m次
匹配前乙個字元出現從m到n次
匹配開頭結尾
字元 功能
^ 匹配字串開頭
$ 匹配字串結尾
ret=re.match(r"^[a-za-z_0-9]@163\.com$",email)
#如果在正規表示式中需要用熬了某些普通的字元,比如?.等,僅僅需要在他們前面新增乙個反斜槓進行轉義
匹配分組
字元 功能
| 匹配左右任意乙個表示式
(ab) 將括號中字元作為乙個分組
\num 引用分組num匹配到的字串
(?p) 分組起別名
(?p=name) 引用別名為name分組匹配到的字串
re模組的高階用法
search: 不用從頭開始匹配 按著正則去找
findall:可以找很多個
sub 將匹配到的資料進行替換(可以替換很多個)
split 根據匹配進行切割字串,並返回乙個列表
貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配.
非貪婪操作符「?」,這個操作符可以用在"*","+","?"的後面
而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。
源字串:aa
test1
bbtest2
cc 正規表示式一:.*
匹配結果一:test1
bbtest2
正規表示式二:.*?
匹配結果二:test1
(這裡指的是一次匹配結果,所以沒包括test2
) 根據上面的例子,從匹配行為上分析一下,什是貪婪與非貪婪模式。
正規表示式一採用的是貪婪模式,在匹配到第乙個「
」時已經可以使整個表示式匹配成功,但是由於採用的是貪婪模式,所以仍然要向右嘗試匹配,檢視是否還有更長的可以成功匹配的子串,匹配到第二個「
」後,向右再沒有可以成功匹配的子串,匹配結束,匹配結果為「test1
bbtest2
」。當然,實際的匹配過程並不是這樣的,後面的匹配原理會詳細介紹。
僅從應用角度分析,可以這樣認為,貪婪模式,就是在整個表示式匹配成功的前提下,盡可能多的匹配,也就是所謂的「貪婪」,通俗點講,就是看到想要的,有多少就撿多少,除非再也沒有想要的了。
正規表示式二採用的是非貪婪模式,在匹配到第乙個「
」時使整個表示式匹配成功,由於採用的是非貪婪模式,所以結束匹配,不再向右嘗試,匹配結果為「test1
」。 僅從應用角度分析,可以這樣認為,非貪婪模式,就是在整個表示式匹配成功的前提下,盡可能少的匹配,也就是所謂的「非貪婪」,通俗點講,就是找到乙個想要的撿起來就行了,至於還有沒有沒撿的就不管了。
2.1.2 關於前提條件的說明
在上面從應用角度分析貪婪與非貪婪模式時,一直提到的乙個前提條件就是「整個表示式匹配成功」,為什麼要強調這個前提,我們看下下面的例子。
正規表示式三:.*
bb 匹配結果三:test1
bb 修飾「.」的仍然是匹配優先量詞「*」,所以這裡還是貪婪模式,前面的「.*
」仍然可以匹配到「test1
bbtest2
」,但是由於後面的「bb」無法匹配成功,這時「.*
」必須讓出已匹配的「bbtest2
」,以使整個表示式匹配成功。這時整個表示式匹配的結果為「test1
bb」,「.*
」匹配的內容為「test1
」。可以看到,在「整個表示式匹配成功」的前提下,貪婪模式才真正的影響著子表示式的匹配行為,如果整個表示式匹配失敗,貪婪模式只會影響匹配過程,對匹配結果的影響無從談起。
非貪婪模式也存在同樣的問題,來看下面的例子。
正規表示式四:.*?
cc 匹配結果四:test1
bbtest2
cc 這裡採用的是非貪婪模式,前面的「.*?
」仍然是匹配到「test1
」為止,此時後面的「cc」無法匹配成功,要求「.*?
」必須繼續向右嘗試匹配,直到匹配內容為「test1
bbtest2
」時,後面的「cc」才能匹配成功,整個表示式匹配成功,匹配的內容為「test1
bbtest2
cc」,其中「.*?
」匹配的內容為「test1
bbtest2
」。可以看到,在「整個表示式匹配成功」的前提下,非貪婪模式才真正的影響著子表示式的匹配行為,如果整個表示式匹配失敗,非貪婪模式無法影響子表示式的匹配行為。
python中字串前面加上 r 表示原生字串
,
與大多數程式語言相同,正規表示式裡使用"\"作為轉義字元
,這就可能造成反斜槓困擾。
python裡的原生字串很好地解決了這個問題,有了原生字串,你再也不用擔心是不是漏寫了反斜槓,寫出來的表示式也更直觀。
在python的string前面加上『r』, 是為了告訴編譯器這個string是個raw string,不要轉意backslash '\' 。 例如,\n 在raw string中,是兩個字元,\和n, 而不會轉意為換行符。由於正規表示式和 \ 會有衝突,因此,當乙個字串使用了正規表示式後,最好在前面加上'r'。
vim替換命名(末行模式下)
正規表示式 正規表示式 總結
非負整數 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正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...