(聲明:本教程僅供本人學習使用,如有人使用該技術觸犯法律與本人無關)
正則的規則:
字符串: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'] |