Python個人學習筆記 正則表達式(一)
正則表達式的組成
①元字符
元字符一次只能匹配一個字符。
特殊元字符:
⑴ .
點運算符??梢云ヅ涑龘Q行符外任意一個字符。若啟用DOTALL標志,則也可以匹配換行符。
⑵ ^
插入符號??梢云ヅ渥址拈_頭。若啟用MULTILINE標志,則也可以匹配行的開頭。
⑶ \A
可以匹配字符串的開頭。但沒有多行模式。
⑷ $
可以匹配字符串的結(jié)尾。若啟用MULTILINE標志,則也可以匹配行的結(jié)尾。
⑸ \b
匹配詞邊界。
要匹配的詞后面不能再跟其他字母。
⑹ \B
匹配非詞邊界。
和\b相反。
⑺ \d
匹配任意數(shù)字字符。若啟用UNICODE標志,則還能匹配更廣泛的 Unicode 數(shù)字字符。
⑻ \D
匹配任意非數(shù)字字符。
⑼ \s
匹配任意空白字符。
⑽ \S
匹配任意非空白字符。
⑾ \w
匹配任意字母、數(shù)字或下劃線。
⑿ \W
匹配任意非字母、數(shù)字或下劃線。
②字符集
可以匹配字符集中的任意一個字符。用[]創(chuàng)建字符集。
減號(-)若出現(xiàn)在字符集內(nèi)的2個字符之間,則表示2個字符范圍內(nèi)的字符;
????????????????若出現(xiàn)在字符集的開頭或結(jié)尾,則表示減號這個符號。
中括號表示字符集,如果想匹配中括號,最好加 \ 來轉(zhuǎn)義。
雖然不加也能匹配,但有時候會出錯。
^表示不在字符集內(nèi)的任意字符。
③表達式量詞
可以和各單個字符組合。
⑴ *
匹配0次或多次。
⑵ +
匹配1次或多次。
⑶ ?
匹配0次或1次。
⑷ |
或運算符。
▲注意,或運算符的優(yōu)先級非常低。
⑸ {}
{n}
精確匹配n次。
{m,n}
匹配[m,n]次。
{,n}
至多匹配n次。
{n,}
至少匹配n次。
⑹ ()
將括號內(nèi)的所有字符視為一個組,與其他量詞組合會作用于整個組。
⑺ \n
匹配到的第n個捕獲組。
\0表示匹配到的整個字符串。
④組
用小括號將小表達式組成大表達式。

Match對象
match()函數(shù)和search()函數(shù)匹配成功會返回一個Match對象,匹配失敗則返回None。
Match對象的用法
用括號給正則表達式模式分組,Match對象可以確定每個組中子表達式匹配到的文本。
⑴?lastindex
返回匹配到的文本組的數(shù)量。
4組括號,所以輸出為4。
⑵?group()
返回指定組匹配到的文本。默認值為0,返回整個正則表達式匹配到的文本。
⑶ groups()
返回一個包含所有組的元組。
⑷?groupdict()
返回所有已命名組組成的字典。
未命名的組就不會被輸出。
⑸?start() / end()
返回指定組匹配到的文本在字符串中的開始/結(jié)束位置。(左閉右開區(qū)間)
⑹ span()
返回指定組匹配到的文本在字符串中的開始和結(jié)束的位置。

正則表達式功能標志
匹配函數(shù)的第三個參數(shù)。
⑴?re.ASCII / re.A
限制匹配規(guī)則為 ASCII 字符集。啟用后,\w、\W、\b、\B、\d、\D、\s 和 \S 等特殊字符將僅匹配 ASCII 字符集中的對應字符。
⑵?re.IGNORECASE / re.I
不區(qū)分大小寫。
⑶?re.LOCALE / re.L
使用數(shù)字字符、單詞邊界、數(shù)字匹配時遵循當前的本地化設置。
⑷?re.MULTILINE / re.M
多行模式。使用^和$匹配行首和行尾以及字符串的開頭和結(jié)尾。
⑸?re.DOTALL / re.S
使用點運算符.匹配所有字符,包括換行符\n。
⑹ re.UNICODE / re.U
#使用UNICODE格式匹配字母數(shù)字字符、單詞邊界和數(shù)字。
⑺?re.VERBOSE / re.X
冗長模式。會忽略空格和換行(除非是正則表達式的一部分),可以在正則表達式中加注釋,便于理解。
去掉 re.X 將會輸出False。
⑻?re.DEBUG
在IDLE中執(zhí)行操作時將輸出編譯后的正則表達式的調(diào)試信息。

匹配小技巧
⑴?compile()
參數(shù)為正則表達式,編譯為一個正則表達式對象,方便重復使用。
⑵?fullmatch() / $
完全匹配。
當用match()函數(shù)的時候,只要開頭匹配到了,就會算是匹配成功。
但是字符串中含有空格,并不是完全匹配的,會與預期不符。這時候可以在表達式結(jié)尾加$或者用fullmatch()函數(shù),只有完全匹配才會返回Match對象。
⑶ \number
指定組。
上面的例子中,有兩個組 (\w+)和([a-z]+),\2則表示第二組。?
(\w+)匹配到ngm,([a-z]+)匹配到hhay。
\n會記錄第n組所匹配到的內(nèi)容,所以這個\2就表示hhay。
所以下面的會返回True。
\n可以用于sub()函數(shù)替換文本中重復的內(nèi)容等功能。





