re 模塊
Python3 正則表達式特殊符號及用法(詳細列表) (出處: 魚C論壇)
正則表達式
常用元字符:
. ^ $ * + ? { } [ ] \ | ( )
| * | 表示匹配0次或多次 |
| + | 表示匹配1次或多次 |
| ? | 表示匹配0次或1次 |
| {m,n} | 表示匹配m到n次(前四個加'?'實現非貪婪匹配) |
| | | 表示或操作 |
| ^ | 匹配字符串的起始位置 |
| $ | 匹配字符串的結束位置 |
\(元字符) ---去除元字符的特殊功能,表示匹配正常字符
\(普通字符) ----實現特殊功能
(普通字符小寫,表示肯定,普通字符大寫,表示非 e.g. \d相當於[0-9] \D相當於[^0-9])
| \d | 相當於[0-9] |
| \s | 匹配任何空白字符,相當於[\t\n\r\f\v] |
| \w | 匹配任何單詞字符 |
| \b | 匹配單詞的開始或結束,表示單詞邊界 |
| \Z | 只匹配字符串的結束位置 |
python字符串與正則表示字符串有沖突,如\b(python字符串表示ASCII碼8制表符,而正則表達式則表示匹配單詞的開始或結束),在python中書寫正則表示式時,要使用python的原始字符串,即添加'r'前綴。
Python 中正則表達式的擴展語法('...'表示正常的正則表達式):
(?:...) 表示非捕獲組,非捕獲組不會影響其他組的序號
(?P<name>...) 表示命名組,反向引用(?P=name)
前向斷言(零寬,即斷言不會被匹配到結果字符串中,也不會消耗字符串):即斷言在此位置的后面匹配的是...的內容(在斷言字符串的前面,故稱前向斷言)
(?=...) 表示肯定,匹配成功表示成功,否則失敗。
(?!...) 表示否定, 匹配失敗表示成功,否則失敗
e.g. .*[.](?!bat$).*$ 匹配文件擴展名不為'bat'的文件
后向斷言(零寬,即斷言不會被匹配到結果字符串中,也不會消耗字符串):即斷言在此位置的前面匹配的是...的內容(在斷言字符串的后面,故稱后向斷言)
(?<=...) 表示肯定,匹配成功表示成功,否則失敗。
(?<!...) 表示否定, 匹配失敗表示成功,否則失敗
條件匹配:
(?(id/name)Y|N) ,如果id 或者name匹配,則匹配'Y',否則,匹配'N'
字符串替換的引用:
\g序號 或 \g<序號> 推薦用第二種方法,防止歧義
\g<name> 用命名組的方式引用
python中使用正則表達式:(re module)
1.調用全局函數:
match(), search(), findall()
參數:(正則表達式, 匹配字符串[,匹配標志])
| ASCII, A | 使得轉義符號如\w, \b, \s, \d只能匹配ASCII字符 |
| DOTALL, S | 使得. 匹配任何符號,包括換行符 |
| IGNORECASE, I | 匹配不區分大小寫 |
| LOCALE, L | 支持當前的語言設置 |
| MULTILINE, M | 多行匹配 |
| VERBOSE, X | 啟用詳細的正則表達式(增加正則表達式的可讀性,匹配時忽略' '和'\n' ) |
2.創建模式對象:
p = re.compile(正則表達式[,匹配標志])
然后調用對象的方法。
詳見python標准文檔。
python全局函數和對象方法中返回的match對象,設為m:
m.group(0) 查看整個正則表達式的匹配字符串
m.group(1) 查看第一個分組的匹配結果(分組在python中用小括號表示),其他分組依此類推
m.group('name') 同上,用分組的名字索引
m.groups() 返回所有分組的匹配結果,用元組表示
m.groupdict() 同上,用字典表示
m.start([group]) 返回匹配的起始位置
m.end([group]) 返回匹配的終止位置
m.span() 查看匹配的首尾位置的元組
詳見python標准文檔。
