python正規表示式

2021-09-02 22:56:00 字數 3771 閱讀 4121

在python中,正則是乙個引過來的模組,叫re模組

就本質來說,正規表示式是一種小型的,高度專業化的程式語言,內嵌在python中

正則的作用簡單來說就是模糊匹配,而且只對字串處理,而且由於它是由c編寫的所以執行速度特別的快

1、普通字元:大多數字元和字母都會和自身匹配

>>

>

import re

>>

>re.findall(

'yibole'

,'as****lajyiboleasdaswvxcvse'

['yibole'

]

2、元字元: . ^ $ * + ? {} | ()

.點是萬用字元,除了換行符\n不行其他的字母、數字,都能匹配到,乙個點代表乙個符號,兩個點代表

re.findall("a..x"."ajhxqrqoijvlkwejr")
^是以什麼開頭的意思,只能在字串開頭去匹配內容:

re,findall("^as..x","asqqxasdwqfdfa")
$是以什麼什麼結尾,只能在字串的末尾去匹配

re,findall("as..x$","asqqxasdwqfdfaasrrx")
*的意思是範圍(0,正無窮)

+的意思是範圍(1,正無窮)

>>

> re.findall(

"yibole*"

,"ajndqwjnyasqwwyibol")[

'yibol'

]>>

> re.findall(

"yibole+"

,"ajndqwjnyasqwwyibol")[

]

?的意思是範圍(0,1)它可以匹配0次或者1次

>>> re.findall("yibole?","ajndqwjnyyibolq")

['yibol']

{}大括號代表可以寫乙個範圍,*,+,==?,就是迴圈6次

>>> re.findall("yibole","ajndqwjnyyiboleeeq")

['yiboleee']

前面的+*?都是貪婪匹配,如果想變成惰性匹配就需要在後面加乙個?就行了

>>

> re.findall(

"yibole*?"

,"qweqweyiboleee")[

'yibol'

]>>

> re.findall(

"yibole+?"

,"qweqweyiboleee")[

'yibole'

]

字符集:的第乙個意思是或的意思,這裡為yi開頭中間b或o之後以le結尾

>>

> re.findall(

"yi[bo]le"

,"asfjqwyibleyioleyibole")[

'yible'

,'yiole'

]

其次,在中沒有特殊符號

>>

> re.findall(

"yi[b*o]"

,"asfjqwyeyibbbbbbbbb")[

'yib'

]>>

> re.findall(

"yi[b*o]"

,"asfjqwyeyibbbbyi*")[

'yib'

,'yi*'

]

但是在中括號內寫[a-z]是指a到z所有的小寫字母,加上*就是取q後面所有的a-z的內容,它是按照ascii碼來排序的,所以如果需要a-z就在括號中寫入[a-z]就可以了

>>> re.findall("q[a-z]*","aafaewqqqwewe")

['qqqwewe']

如果在字符集中加入後,比如[a-z],意思就是非,代表不是a-z就可以匹配了

>>> re.findall("q[^a-z]","qweq123qq")

['q1']

在字符集中的\是轉譯符,可以讓有意義的變成無意義,無意義變成有意義的:

>>> re.findall("\([^()]*\)","(1+2+(1-2)")

['(1-2)']

\d匹配任何十進位制數,他相當於類[0-9]

\d匹配任何非數字字元,他相當於[^0-9]

\s匹配任何空白字元,相當於[\t\n\r\f\v]

\s匹配任何非空白字元,相當於[^\t\n\r\f\v]

\w匹配任何數字字母字元,相當於[a-za-z0-9_]

\w匹配任何非字母數字字元,相當於[^a-za-z0-9_]

\b匹配特殊字元邊界,比如空格,&,#等

>>

> re.findall(

"\d+"

,"(11+22+(1-2)")[

'11'

,'22'

,'1'

,'2'

]>>

> re.findall(

"\d+"

,"(11+22+(1-2)")[

'(',

'+',

'+('

,'-'

,')'

]>>

> re.findall(

"\s+"

,"hello world")[

' ']

>>

> re.findall(

"\s+"

,"hello world")[

'hello'

,'world'

]>>

> re.findall(

"\w+"

,"hello world")[

'hello'

,'world'

]>>

> re.findall(

"\w+"

,"hello world")[

' ']

但是轉義字元\在python中和re中有相同的作用,所以在使用中如果需要匹配字串中帶有\的字元,就需要兩次轉義,或者在字串前寫上r讓python編譯器不轉義:

>>> re.findall("i\\b","i am list")

['i']

>>> re.findall(r"i\b","i am list")

['i']

|是或的意思,()是分組

>>

> re.findall(r"ka|ab"

,"asfsaabdka")[

'ab'

,'ka'

]>>

> re.findall(

"(abc)+"

,"abcawdabc")[

'abc'

,'abc'

]

匹配時不僅可以使用findall還可以使用search,findall是把字串中所有正確匹配的數全部取出來,而search查詢到第乙個正確的值之後後面的就不再查詢了,而匹配成功了之後把這個物件的值取出來就需要用group:

>>> re.search("\d+","as****sdasd34asdw555").group()

'34'

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...

Python正規表示式

學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...