Python正則

暫時(shí)先寫到這里,隨使用逐步更新此文,希望我的總結(jié)能幫到你

Regular Expression Syntax

**' . ' **在默認(rèn)模式下,匹配除換行符以外的任意字符。如果指定 DOTALL 標(biāo)志,將匹配任何字符,包括換行符。

' ^ ' 匹配字符串的起始,并且在MULTILINE 模式下 也匹配多行的起始位置。

' $ ' 匹配字符串的末尾,或者新的一行前字符的末尾。在 MULTLINE 模式下將匹配多行的末尾位置。'foo' 匹配 'foo''foobar',然而正則表達(dá)式'foo$' 僅匹配' foo' 。更有趣的是,search for 'foo.$''foo1\nfoo2\n' 自然匹配'foo2',在MULTILINE模式下'foo1'會(huì)被匹配;在'foo\b'中尋找單一'$'將會(huì)返回兩個(gè) 空(empty)匹配:一個(gè)在新的一行之前,一個(gè)在字符串的結(jié)尾。

' * ' 使該符號(hào)前面的正則表達(dá)式匹配0次或多次,盡可能更多的匹配。'ab*' 將會(huì)匹配 'a','ab'或者'a'跟隨著任意數(shù)量的'b'

' + ' 使得該符號(hào)前面的正則表達(dá)式匹配1次或多次,'ab+' 將會(huì)匹配 'a'跟隨著任意非零數(shù)量的'b',不會(huì)僅僅匹配一個(gè)'a'

' ? ' 使得該符號(hào)前面的正則表達(dá)式匹配1次或0次,'ab?' 將會(huì)匹配 'a'或'ab'

*?, +? , ?? 符號(hào)* ',' + ',' ? '是貪婪匹配,他們盡可能更多的匹配字符。有時(shí)我們不需要這樣的性質(zhì),如果 RE <.****>匹配 <a> b <c>,它將會(huì)匹配整個(gè)字符串,而不是<a>。在這幾個(gè)符號(hào)后面加上?使他進(jìn)行非貪婪模式匹配或者最小匹配,盡可能少的字符將會(huì)被匹配。使用RE <.*?>將會(huì)僅僅匹配<a>

{m} 前面的正則表達(dá)式重復(fù)m次形成的表達(dá)式將會(huì)被匹配,少于正則次數(shù)的將不會(huì)被匹配,例如a{6}將會(huì)僅匹配 6 個(gè) 'a'字符,而不是5個(gè)'a'

{m,n} 符合前面正則表達(dá)式重復(fù)m到n次形成的表達(dá)式將會(huì)被匹配,盡可能的匹配更多的前面的正則。這個(gè)表達(dá)式還有非貪婪的版本。例如 'aaaaaa' 'a{3,5}'將會(huì)匹配5個(gè)'a' ,但是' a{3,5}? '將會(huì)僅匹配3個(gè)'a'。{m,n}僅會(huì)使最近的正則表達(dá)式重復(fù)m-n次,例如 ab{m,n},只會(huì)使b重復(fù)m-n次,如果你希望重復(fù)的RE表達(dá)更長(zhǎng),可以將前面需要重復(fù)的部分加上括號(hào)(ab){m,n},這樣ab將重復(fù)m-n次。

' \ ' 轉(zhuǎn)譯你希望匹配的特殊字符,例如你希望匹配 ' * ' , ' ? ' 等字符。

'[ ]' 使用這個(gè)指明一組字符集合

  • 這以直接列出字符,例如 [amk] 將會(huì)匹配 ' a ',' m ',' k '
  • 在兩個(gè)字符中添加' - '字符將兩個(gè)字符分開,表明字符的范圍。列如[a-z]將會(huì)匹配所有的小謝字母,[0-5][0-9]將會(huì)匹配所有的兩位的數(shù)字從00到59,并且[0-9A-Fa-f]將會(huì)匹配任何16進(jìn)制數(shù)
  • 在集合中特殊字符失去了他們的特殊意義。例如:[(+*)] 將匹配任何字符 ' ( ' , ' + ' , ' * ' , ' ) '
  • 在集合中字符類也被例如\w或者\(yùn)s 也會(huì)被接受,盡管他們匹配的含義取決于 LOCALE或者UNICODE 模式被設(shè)置。
  • 如果集合中地一個(gè)字符被設(shè)置為' ^ '所有不在集合中的字符將會(huì)被匹配。
    NOTE:如果你需要匹配 [或者]以及相似的在re表達(dá)式中有特殊含義的字符,匹配[可以使用\轉(zhuǎn)義字符,當(dāng)你需要匹配]時(shí),不需要轉(zhuǎn)義。

' | ' A|B,A或者B可以是任意RE正則,這個(gè)正則將會(huì)匹配A或者B ,在 RE 表達(dá)式中匹配順序按照從左到右。一旦沖共匹配則跳過(guò)右邊的表達(dá)式。如果

** '(...)'** 匹配封閉括號(hào)中的正則表達(dá)式,并保存為分組。分組組的內(nèi)容在匹配后可以被重新使用。

\number引用編號(hào)為number分組中匹配到的字符串,分組號(hào)從1開始。

import re
pattern = re.compile(r'(\w+) (\w+)')
s = 'i say, hello world!'
print re.sub(pattern,r'\2 \1',s)
###out###
say i, world hello!

\A 匹配字符串的起始位置

a = re.findall(r'\Athis' , 'this is a this string ,have lots of this')
a = re.findall('this' , 'this is a this string,have lots of this')
###out###
a = ['this']
a = ['this','this','this']

\Z 匹配字符串的結(jié)尾位置,例子參考上面' \A '的示例

\b 匹配\w 和\W之間,官方的解釋是(Match the empty string,but only at the beginning or end of a word)我覺得就是匹配 非\w

re.search(r'foo\b','foo')   
re.search(r'foo\b','foo.')
re.search(r'foo\b','foo)')
re.search(r'foo\b','foo)))))')
###all match###

\B 與\b恰好相反

\d 當(dāng)未設(shè)置UNICODE標(biāo)志,匹配任意的十進(jìn)制數(shù),與[0-9]的效果相同,當(dāng)UNICODE標(biāo)志設(shè)置時(shí),匹配UNICODE中的所有標(biāo)記為數(shù)字的字符。

\D\d恰好相反

\s 當(dāng)設(shè)置UNICODE標(biāo)志,匹配任意的空白字符(whitespace character),與[\t\n\r\f\v]的效果相同。LOCALE標(biāo)志不會(huì)擴(kuò)展機(jī)器中的空白字符。當(dāng)UNICODE標(biāo)志設(shè)置時(shí),匹配所有UNICODE字符集中的所有空白字符

\S\s恰好相反

\w 當(dāng)設(shè)置LOCALEUNICODE標(biāo)志,匹配所有的字母數(shù)字以及下劃線,與[a-zA-Z0-9_]效果相同

\W\w恰好相反

Module Contents

re.compile(pattern,flags=0)
編譯正則表達(dá)式為正則表達(dá)式對(duì)象,可以在re.match()和re.search方法中使用。

result = prog.match(string)```
和這樣的用法相同
```result = re.match(pattern,string)```
然而使用re.compile() 并且將結(jié)果保存在正則表達(dá)式對(duì)象中,當(dāng)這個(gè)表達(dá)式在同一程序中被多次使用時(shí)效果更明顯。
>**```re.DEBUG```** 
顯示關(guān)于編譯表達(dá)式的debug信息
***
**```re.I
re.IGNORECASE```**
執(zhí)行不區(qū)分大小寫匹配
***
**```re.M
re.MULTILINE```**
當(dāng)被指定后,模式字符```' ^ '```匹配字符串的起始和每行的起始。模式字符```' $ '```匹配字符串的末尾和每行的末尾。
***
**```re.S
re.DOTALL```**
使```' . '```匹配任意字符,包括換行符
***
**```re.U
re.UNICODE```**
使\w,\W,\b,\B,\d,\D,\s,\S依賴于Unicode 字符屬性庫(kù)
***
>**```re.search(pattern,string,flags = 0)```**
掃描整個(gè)字符串,尋找正則表達(dá)式第一個(gè)匹配的位置。把相應(yīng)的```MathObject```實(shí)例返回.如果沒有任何位置匹配返回```None```.

>**```re.match(pattern,string,flags = 0)```**
如果 0 或者更多的字符在字符串的起始位置匹配正則表達(dá)式,返回一個(gè)相應(yīng)的```MathObject```實(shí)例。如果沒有匹配返回```None```。
NOTE:即使在```MULTILINE```模式下,```re.match```也只會(huì)匹配字符串的起始位置,而不是每一行的起始位置。

>**```re.splite(pattern,string,maxsplit = 0 , flags = 0)```**
依照匹配模式拆分字符串,如果在模式匹配中使用捕獲括號(hào),在模式組中的所有文本也成為返回結(jié)果列表的一部分。如果設(shè)置maxsplit不為0,那么最多分割maxsplite次。
```>>>re.split('\W+', 'Words, words, words.')```
```['Words', 'words', 'words', '']```
```>>> re.split('(\W+)', 'Words, words, words.')```
```['Words', ', ', 'words', ', ', 'words', '.', '']```
```>>> re.split('\W+', 'Words, words, words.', 1)```
```['Words', 'words, words.']```
````>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)```
```['0', '3', '9']```

>**```re.findall(pattern,string,flags = 0)```**
返回字符串中的模式串的所有的非重疊匹配,返回一個(gè)字符列表。從左至右掃描字符串,匹配結(jié)果按照查找順序返回。如果一個(gè)或者多個(gè)group在匹配模式中,返回一個(gè)group列表。如果匹配模式中包含超過(guò)一個(gè)group 將返回一個(gè)包含元組的列表

>**```re.finditer(pattern,string,flags=0)```**
搜索string,返回一個(gè)順序訪問(wèn)每一個(gè)匹配結(jié)果的迭代器,從左向右掃描字符串,按照匹配順序返回匹配結(jié)果。

>**```re.sub(pattern,repl,string,count = 0,flags = 0)```**
使用repl 替換string中每一個(gè)匹配的字符后,返回替換后的字符串。repl可以是一個(gè)字符傳或者函數(shù),當(dāng)repl是一個(gè)字符串時(shí),可以使用\id \g引用分組,但編號(hào)要從1起始。當(dāng)repl是一個(gè)方法時(shí),該方法接受一個(gè)(Match對(duì)象),返回用于替代的字符串。

>**```re.subn(pattern,repl,string[,count])```**
與re.sub方法類似,不過(guò)可以通過(guò)設(shè)置count,設(shè)置替換次數(shù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,415評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,647評(píng)論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評(píng)論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,366評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,887評(píng)論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,737評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,939評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,174評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評(píng)論 1 283
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,608評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,914評(píng)論 2 372

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