正則表達式筆記

正則表達式


元字符

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

元字符 ? ? ? ? ? ? |說明


. ? ? ? ? ? ? ? ? ? ? |代表任意字符|

| ? ? ? ? ? ? ? ? ? ? |邏輯或操作符|

[ ] ? ? ? ? ? ? ? ? ? ? |匹配內(nèi)部的任一字符或子表達式|

[^] ? ? ? ? ? ? ? ? ? ? |對字符集和取非|

-? ? ? ? ? ? ? ? ? ? ? ? ? ? |定義一個區(qū)間|

\ ? ? ? ? ? ? ? ? ? ? |對下一字符取非(通常是普通變特殊矮固,特殊變普通)|

*? ? ? ? ? ? ? ? ? ? ? ? ? ? |匹配前面的字符或者子表達式0次或多次|

*? ? ? ? ? ? ? ? ? ? ? ? |惰性匹配上一個|

+? ? ? ? ? ? ? ? ? ? ? ? ? |匹配前一個字符或子表達式一次或多次|

+? ? ? ? ? ? ? ? ? ? ? |惰性匹配上一個|

? ? ? ? ? ? ? ? ? ? ? |匹配前一個字符或子表達式0次或1次重復(fù)|

{n} ? ? ? ? ? ? ? ? ? ? |匹配前一個字符或子表達式|

{m,n} ? ? ? ? ? ? |匹配前一個字符或子表達式至少m次至多n次|

{n,} ? ? ? ? ? ? ? ? ? ? |匹配前一個字符或者子表達式至少n次|

{n,}? ? ? ? ? ? ? |前一個的惰性匹配|

^ ? ? ? ? ? ? ? ? ? ? |匹配字符串的開頭|

\A ? ? ? ? ? ? ? ? ? ? |匹配字符串開頭|

$ ? ? ? ? ? ? ? ? ? ? |匹配字符串結(jié)束|

[\b] ? ? ? ? ? ? ? ? ? ? |退格字符|

\c ? ? ? ? ? ? ? ? ? ? |匹配一個控制字符|

\d ? ? ? ? ? ? ? ? ? ? |匹配任意數(shù)字|

\D ? ? ? ? ? ? ? ? ? ? |匹配數(shù)字以外的字符|

\t ? ? ? ? ? ? ? ? ? ? |匹配制表符|

\w ? ? ? ? ? ? ? ? ? ? |匹配任意數(shù)字字母下劃線|

\W ? ? ? ? ? ? ? ? ? ? |不匹配數(shù)字字母下劃線|


組與捕獲

1.? ()的作用:

1.捕獲()中正則表達式的內(nèi)容以備進一步利用處理,可以通過在左括號后面跟隨?:來關(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.將正則表達式的一部分內(nèi)容進行組合洲拇,以便使用量詞或者|。

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

? ? ? 1. 通過組號反向引用

每一個沒有使用?:的小括號都會分配一個組好蛹头,從1開始肮雨,從左到右遞增,可以通過\i引用前面()內(nèi)表達式捕獲的內(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)題')]

? ? ? []

? ? ? 2. 通過組名反向引用前面小括號內(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)? ? ? ? ? ? ? ? ? ? ? ? |負前瞻

 (?<=e)? ? ? ? ? ? ? ? ? ? |正回顧

 (?<!e)? ? ? ? ? ? ? ? ? ? ? | 負回顧

? ? 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

負前瞻? ? ? ? ? ? |exp1(?!exp2) exp1后面的內(nèi)容不能匹配exp2

后顧? ? ? ? ? ? ? ? |(?<=exp2)exp1 exp1前面的內(nèi)容要匹配exp2

負后顧? ? ? ? ? ? | (?<!exp2)exp1 exp1前面的內(nèi)容不能匹配exp2

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


條件匹配

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


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

1. 正則表達式的標(biāo)志有兩種使用方法

 1. 通過給compile方法傳入標(biāo)志參數(shù)饼灿,多個標(biāo)志使用|分割的方法,如re.compile(r"#[\da-f]{6}\b", re.IGNORECASE|re.MULTILINE)

 2. 通過在正則表達式前面添加(?標(biāo)志)的方法給正則表達式添加標(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 使正則表達式忽略大小寫

 re.M或者re.MULTILINE 多行匹配骂澄,使每個^在每個回車后摸袁,每個$在每個回車前匹配

 re.S或者re.DOTALL 使.能匹配任意字符,包括回車

 re.X或者re.VERBOSE 這樣可以在正則表達式跨越多行庇忌,也可以添加注釋舞箍,但是空白需要使用\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
  • 文/潘曉璐 我一進店門彰导,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浊闪,“玉大人,你說我怎么就攤上這事螺戳。” “怎么了折汞?”我有些...
    開封第一講書人閱讀 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)容

  • 正則表達式代表的匹配字符[0-9]0123456789任意之一[a-z]小寫字母任意之一[A-Z]大寫字母任意之一...
    隱墨留白閱讀 466評論 0 0
  • python re模塊重要函數(shù)變量:1. compile() 根據(jù)正則表達式字符串盗誊,創(chuàng)建模式的對象。2. sear...
    野狗子嗷嗷嗷閱讀 297評論 0 1
  • 正則表達式一般用于檢索,替換文本哈踱。 一.正則表達式元字符和語法: 這些語法是每種語言都通用的荒适。接下來記一下pyth...
    omuraisu閱讀 642評論 0 2
  • 一、正則表達式語法 (一) 字符與字符類 特殊字符:\.^$?+*{}[]()|以上特殊字符要想使用字面值开镣,必須使...
    limit_lin閱讀 47,220評論 4 74
  • ?我的家鄉(xiāng)靖江刀诬,位于長江中下游,由長江泥沙沖擊形成邪财,是三國時期東吳的養(yǎng)馬場陕壹,故又名馬駝沙。靖江三面環(huán)江树埠,南與江陰糠馆、...
    律匠閱讀 396評論 0 1