正則表達(dá)式筆記

正則表達(dá)式 代表的匹配字符
[0-9] 0123456789任意之一
[a-z] 小寫字母任意之一
[A-Z] 大寫字母任意之一
\d 等同于[0-9]
\D 等同于[^0-9]匹配非數(shù)字
\w 等同于[a-z0-9A-Z_]匹配大小寫字母、數(shù)字和下劃線
\W 等同于[^a-z0-9A-Z_]等同于上一條取非

下面列舉一些正則表達(dá)式里的元字符及其作用

元字符 說明
. 代表任意字符
| 邏輯或操作符
[ ] 匹配內(nèi)部的任一字符或子表達(dá)式
[^] 對字符集和取非
- 定義一個區(qū)間
\ 對下一字符取非(通常是普通變特殊响牛,特殊變普通)
* 匹配前面的字符或者子表達(dá)式0次或多次
*? 惰性匹配上一個
+ 匹配前一個字符或子表達(dá)式一次或多次
+? 惰性匹配上一個
? 匹配前一個字符或子表達(dá)式0次或1次重復(fù)
{n} 匹配前一個字符或子表達(dá)式
{m,n} 匹配前一個字符或子表達(dá)式至少m次至多n次
{n,} 匹配前一個字符或者子表達(dá)式至少n次
{n,}? 前一個的惰性匹配
^ 匹配字符串的開頭
\A 匹配字符串開頭
$ 匹配字符串結(jié)束
[\b] 退格字符
\c 匹配一個控制字符
\d 匹配任意數(shù)字
\D 匹配數(shù)字以外的字符
\t 匹配制表符
\w 匹配任意數(shù)字字母下劃線
\W 不匹配數(shù)字字母下劃線

組與捕獲

  1. ()的作用:
    1.捕獲()中正則表達(dá)式的內(nèi)容以備進(jìn)一步利用處理峰搪,可以通過在左括號后面跟隨?:來關(guān)閉這個括號的捕獲功能

    import re
    url = 'https://113.215.20.136:9011'
    pattern1 = re.findall(r'(\d{1,3}\.){3}\d{1,3}',url)
    print(pattern1)
    pattern2 = re.findall(r'(?:\d{1,3}\.){3}\d{1,3}',url)
    print(pattern2)
    #運行結(jié)果
    ['20.']
    ['113.215.20.136']
    

    2.將正則表達(dá)式的一部分內(nèi)容進(jìn)行組合啤咽,以便使用量詞或者|辣卒。

  2. 反向引用前面()內(nèi)捕獲的內(nèi)容:

    1. 通過組號反向引用
      每一個沒有使用?:的小括號都會分配一個組號鼓蜒,從1開始部逮,從左到右遞增醋虏,可以通過\i引用前面()內(nèi)表達(dá)式捕獲的內(nèi)容
    import re
    strhtml1  = '<h1>這是一個標(biāo)題<h1>'
    pattern1 = re.findall(r'<h([0-9])>(.*?)<h\1>',strhtml1)
    print(pattern1)
    strhtml2  = '<h1>這是一個標(biāo)題<h3>'
    pattern2 = re.findall(r'<h([0-9])>(.*?)<h\1>',strhtml2)
    print(pattern2)
    #運行結(jié)果
    [('1', '這是一個標(biāo)題')]
    []
    
    1. 通過組名反向引用前面小括號內(nèi)捕獲的內(nèi)容
      可以通過在左括號后面跟隨?P<name>,尖括號中放入組名來為一個組起一個別名,后面通過(?P=name)來引用 前面捕獲的內(nèi)容谭胚。如(? P<word>\w+)\s+(?P=word)來匹配重復(fù)的單詞徐块。
      通常用在 后臺匹配url路由。
  3. 注意點:反向引用不能放在字符類[]中使用灾而。

斷言與標(biāo)記
斷言不會匹配任何文本胡控,只是對斷言所在的文本施加某些約束

常用斷言 說明
\b 匹配單詞的邊界,放在字符類[]中則表示backspace
\B 匹配非單詞邊界旁趟,受ASCII標(biāo)記影響
\A 在起始處匹配
^ 在起始處匹配昼激,如果有MULTILINE標(biāo)志,則在每個換行符后匹配
\Z 在結(jié)尾處匹配
$ 在結(jié)尾處匹配锡搜,如果有MULTILINE標(biāo)志橙困,則在每個換行符前匹配
(?=e) 正前瞻
(?!e) 負(fù)前瞻
(?<=e) 正回顧
(?<!e) 負(fù)回顧
import re
key = r"<html><body><h1>hello world</h1></body></html>"
pattern1 = re.findall(r"(?<=<h1>).+?(?=</h1>)",key)
print(pattern1)
#運行結(jié)果
['hello world']

url = 'https://113.215.20.136:9011/113.215.6.77/'
pattern = re.findall(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])',url)
print(pattern)
#運行結(jié)果
['113.215.20.136', '113.215.6.77']

前瞻回顧的解釋

說明 格式 描述
前瞻 exp1(?=exp2) exp1后面的內(nèi)容要匹配exp2
負(fù)前瞻 exp1(?!exp2) exp1后面的內(nèi)容不能匹配exp2
后顧: (?<=exp2)exp1 exp1前面的內(nèi)容要匹配exp2
負(fù)后顧 (?<!exp2)exp1 exp1前面的內(nèi)容不能匹配exp2

例如:我們要查找hello,但是hello后面必須是world耕餐,正則表達(dá)式可以這樣寫:"(hello)\s+(?=world)",用來匹配"hello wangxing"和"hello world"只能匹配到后者的hello

條件匹配
  (?(id)yes_exp|no_exp):對應(yīng)id的子表達(dá)式如果匹配到內(nèi)容凡傅,則這里匹配yes_exp,否則匹配no_exp

正則表達(dá)式的標(biāo)志

  1. 正則表達(dá)式的標(biāo)志有兩種使用方法
     1. 通過給compile方法傳入標(biāo)志參數(shù)肠缔,多個標(biāo)志使用|分割的方法,如re.compile(r"#[\da-f]{6}\b", re.IGNORECASE|re.MULTILINE)
     2. 通過在正則表達(dá)式前面添加(?標(biāo)志)的方法給正則表達(dá)式添加標(biāo)志夏跷,如(?ms)#[\da-z]{6}\b
  2. 常用的標(biāo)志
     re.A或者re.ASCII, 使\b \B \s \S \w \W \d \D都假定字符串為假定字符串為ASCII
     re.I或者re.IGNORECASE 使正則表達(dá)式忽略大小寫
     re.M或者re.MULTILINE 多行匹配桩砰,使每個^在每個回車后拓春,每個$在每個回車前匹配
     re.S或者re.DOTALL 使.能匹配任意字符,包括回車
     re.X或者re.VERBOSE 這樣可以在正則表達(dá)式跨越多行亚隅,也可以添加注釋硼莽,但是空白需要使用\s或者[ ]來表示,因為默認(rèn)的空白不再解釋煮纵。
    本文參考
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懂鸵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子行疏,更是在濱河造成了極大的恐慌匆光,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酿联,死亡現(xiàn)場離奇詭異终息,居然都是意外死亡夺巩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門周崭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柳譬,“玉大人,你說我怎么就攤上這事续镇∶腊模” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵摸航,是天一觀的道長制跟。 經(jīng)常有香客問我,道長酱虎,這世上最難降的妖魔是什么雨膨? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮逢净,結(jié)果婚禮上哥放,老公的妹妹穿的比我還像新娘歼指。我一直安慰自己爹土,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布踩身。 她就那樣靜靜地躺著胀茵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挟阻。 梳的紋絲不亂的頭發(fā)上琼娘,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音附鸽,去河邊找鬼脱拼。 笑死,一個胖子當(dāng)著我的面吹牛坷备,可吹牛的內(nèi)容都是我干的熄浓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼省撑,長吁一口氣:“原來是場噩夢啊……” “哼赌蔑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起竟秫,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤娃惯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肥败,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾浅,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡愕提,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了皿哨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揪荣。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖往史,靈堂內(nèi)的尸體忽然破棺而出仗颈,到底是詐尸還是另有隱情,我是刑警寧澤椎例,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布挨决,位于F島的核電站,受9級特大地震影響订歪,放射性物質(zhì)發(fā)生泄漏脖祈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一刷晋、第九天 我趴在偏房一處隱蔽的房頂上張望盖高。 院中可真熱鬧,春花似錦眼虱、人聲如沸喻奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撞蚕。三九已至,卻和暖如春过牙,著一層夾襖步出監(jiān)牢的瞬間甥厦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工寇钉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刀疙,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓扫倡,卻偏偏與公主長得像谦秧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子镊辕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Python中的正則表達(dá)式(re) import rere.match #從開始位置開始匹配油够,如果開頭沒有則無re...
    BigJeffWang閱讀 7,053評論 0 99
  • 正則表達(dá)式一般用于檢索,替換文本征懈。 一.正則表達(dá)式元字符和語法: 這些語法是每種語言都通用的石咬。接下來記一下pyth...
    omuraisu閱讀 642評論 0 2
  • 元字符量詞字符類分支條件反義分組后向引用零寬斷言負(fù)向零寬斷言注釋貪婪與懶惰處理選項平衡組/遞歸匹配其它 元字符 ...
    神刀閱讀 269評論 0 0
  • python re模塊重要函數(shù)變量:1. compile() 根據(jù)正則表達(dá)式字符串,創(chuàng)建模式的對象卖哎。2. sear...
    野狗子嗷嗷嗷閱讀 297評論 0 1
  • 一鬼悠、正則表達(dá)式語法 (一) 字符與字符類 特殊字符:\.^$?+*{}[]()|以上特殊字符要想使用字面值删性,必須使...
    limit_lin閱讀 47,220評論 4 74