Python小白正則整理

(聲明:本教程僅供本人學習使用,如有人使用該技術觸犯法律與本人無關)


正則的規則:

字符串:re 模塊
patter:寫的是規則’ ’
str : 要驗證的字符串
flags=0 : 匹配模式 re.I L M S U X


re.match( )

在這裏插入圖片描述

re.search( )

在這裏插入圖片描述

findall( )

在這裏插入圖片描述


單個匹配


. : 代表的是除了換行符(\n)以外的任意一個字符
[內容]:匹配中括號中任意一個字符
[a-z] : 匹配小寫字母
[A-Z] :匹配大寫字母
[0-9]:匹配數字
[a-zA-Z0-9 .] :匹配 字母數字空格點

***{注}***: “ ^ ” 在 [ ] 中寫代表非,不匹配 [ ] 的字符
在這裏插入圖片描述


\d : 匹配所有的數字,同[0-9]
\D : 匹配非數字,同[^0-9]
\w : 匹配數字字母下劃線
\W:匹配除數字字母下劃線以外的
\s:匹配所有的空白符,\t,\n,\r,空格
\S:匹配所有的非空白符
\ : 可以轉義,不讓他有特殊意義


邊界字符

內容:在中括號外部,必須以後面的東西開頭
內容$:必須以‘內容’結尾

(只能匹配整個字符串的,re.M失效)

\A內容 : 開頭
內容\Z : 結尾


內容\b 或者 r’\b’ : (有邊界可以匹配成功)匹配一個單詞
\B :(沒有邊界纔可以匹配成功)


多個匹配

() :組,一組數據,作爲整體去匹配
| :或,

  • :匹配0個或任意多個字符(貪婪匹配)
    ?:匹配0個或任意1個字符(非貪婪匹配)
    +:匹配1個或者多個字符(貪婪匹配)
    {x}:一次匹配x個字符
    {x,y}:匹配爲x-y內的字符數 都可以(y不寫,默認無上限)
    在* + 後加?可以解決貪婪匹配,即能儘量少匹配就少

正則表達式–字符串

(可以將字符串封裝成一個對象)
re.compile(規則,匹配模式)(正則規則對象)


在這裏插入圖片描述

對應的方法

group() 返回被 RE 匹配的字符串。
start() 返回匹配開始的位置
end()   返回匹配結束的位置
span()  返回一個元組包含匹配 (開始,結束) 的位置

拆分替換

在這裏插入圖片描述


正則分組

字符 含義 示例 結果 注意
(…) 括號內爲一組;分組有編號,從1開始算起;分組作爲一個整體只在分組內部有效 re.findall('(ab+?)(bb)','abbb') [('ab', 'bb')]
(?P…) 除編號外的另一個分組名
(<number>) 引用編號爲的分組匹配的字符串,通常指分組的下標
(?P) 給分組起別名 re.match('(?P<dwl>ab+?)','abbb').group('dwl') ab
(?: …) 非分組模式的匹配 re.findall('(?:ab+?)(?:bb)','abbb') ['abbb']
(?P=name) 對指定的組反向的引用,以前面的以name爲名稱的組匹配的文本爲分組內容,匹配後面的內容 (示例:‘[email protected]’)'(?P<number>[1-9]){5}@(?P<letters>[a-z])+\.(?P=letters)+') '[email protected]'
(?=…) 當該表達式匹配成功的時候,它的前面的表達式纔會匹配. re.match('\w+@(?=\d+)','abcds@123456').group() abcds@
(?!..) 當該表達式不匹配的時候,它的前面的表達式都會匹配成功 re.match('\w+@(?!\d+)','abcds@dfa').group() abcds@
(?<=…) 匹配以…開始的後面部分的字串,只能是固定的長度,也就是一個明確的表達式. re.match('(?<=abc)def', 'abcdef') / re.search('(?<=abc)def', 'abcdef') None / <_sre.SRE_Match object; span=(3, 6), match='def'> 說明:該模式不能於一個字符串的開始
(?<!..) 匹配不是以…開始的後面部分的字串.只能是固定的長度 re.match('(\w+)(?<!zhang)san', 'mylisan').group() mylisa
(?(id/name)yes|no) 如果給定的 id 或 name 存在,將會嘗試匹配 yes-pattern ,否則就嘗試匹配 no-pattern,no-pattern 可選,也可以被忽略。比如, (<)?(\w+@\w+(?:.\w+)+)(?(1)>|$) 是一個email樣式匹配,將匹配 ‘[email protected]’ 或’[email protected]’ ,但不會匹配 ‘<[email protected]’ ,也不會匹配 ‘[email protected]>’ re.search(r'(\d){0,}abc(?(1)\d|abc)','abcabc') / re.searcj(r'(?P<lefg_bracket>\()?\w+(?(lefg_bracket)\)|$)', '(abdcd') abcabc / None 如果id爲1的組匹配數不允許爲0個的話,當其匹配過程中匹配爲0的話規則就會匹配失敗 / 檢查的是一個字符串兩邊的括號是否配對,如果沒有括號或配對,則匹配成功,否則將匹配失敗
(?P#…) 註釋,#後面的東西會被註釋
(?aiLmsux) ( ‘a’, ‘i’, ‘L’, ‘m’, ‘s’, ‘u’, ‘x’ 中的一個或多個) 這個組合匹配一個空字符串;這些字符對正則表達式設置以下標記 re.A (只匹配ASCII字符), re.I (忽略大小寫), re.L (語言依賴), re.M (多行模式), re.S (點dot匹配全部字符), re.U (Unicode匹配), and re.X (冗長模式) (re.findall('((?a)\d+)','a232') ['232']

引用☞ 正則表達式(RegEx)官方手冊/權威指南【Python】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章