1 簡介/動機
正則表達式 :為高級的文本模式匹配、抽取、與/或文本形式的搜索和替換功能提供了基礎。
Python 通過標准的re模塊來支持正則表達式。
注意:此處我們提到的搜索和匹配意義不一樣
你的第一個正則表達式
正則表達式 | 匹配的字符串 |
---|---|
foo | foo |
Python | Python |
abc123 | abc123 |
666 | 666 |
2 符號和字符
元字符 賦予正則表達式強大的功能和靈活性。
舉例
表示法 | 描述 | 正則表達式示例 |
---|---|---|
literal | 匹配文本字符串的字面值literal | fool |
re1/re2 | 匹配正則表達式re1或者re2 | fool/bar |
. | 匹配任何字符(除\n) | b.b |
^ | 匹配字符串起始部分 | ^Dear |
$ | 匹配字符串終止部分 | /bin/*sh$ |
* | 匹配0次或多次前面出現的表達式 | [A-Za-z0-9]* |
+ | 匹配1次或者多次前面出現的正則表達式 | [a-z]+.com |
? | 匹配0次或者1次前面出現的正則表達式 | gool? |
{N} | 匹配N次前面出現的表達式 | [0-9]{3} |
{M,N} | 匹配M~N次前面出現的正則表達式 | [0-9]{5,9} |
[...] | 匹配來自字符集任意單一字符 | [aeiou] |
[..x-y..] | 匹配x-y范圍中的任意單一字符 | [0-9],[A-Za-z] |
[^...] | 不匹配此字符集出現的任意一個字符 | [aeiou][A-Za-z] |
(*|+|?|{})? | 用於匹配上面頻繁出現符號的非貪婪版本 | .*?[a-z] |
(...) | 匹配封閉式的正則表達式,然后另存為子組 | ([0-9]{3})?,f(oo|u)bar |
\d | 匹配任何十進制數字,\D與之相反 | data\d+.txt |
\w | 匹配任何字母數字字符,\W與之相反 | [A-Za-z |
\s | 匹配任何空格字符,與[\n\t\r\v\f]相同(\S與之相反) | of\sthe |
\b | 匹配任何單詞邊界(\B與之相反) | \bThe\b |
\N | 匹配已保存的子組 N (參見上面的(...) | price:\16 |
\c | 逐字匹配任何特殊字符c | \.,\* |
A(\Z) | 匹配字符串的起始(結束) | \ADear |
2.1 使用擇一匹配符號匹配多個正則表達式模式
擇一匹配的管道符號(|)表示從”從多個模式選擇其一的操作
正則表達式模式 | 匹配的字符串 |
---|---|
at | home | at、home |
r2d2 | \c3po | r2d2、c3po |
bat | bet | bit | bat、bet、bit |
擇一匹配符號(|) 也稱作並(union)或邏輯或(logical OR)
2.2 匹配任意單個字符
點號(.)匹配除了換行符(\n)以外的任意字符。
注意:匹配句點或者句號,必須使用反斜杠轉義句點符號的功能(\.)
2.3 從字符串起始或者結尾或者單詞邊界匹配
匹配字符串的開始位置:^、\A
匹配字符串的末尾位置:$、\Z
注意:匹配一個字符串(^Subject:hi$)
匹配一個單詞的邊界:\b, \B
注意:\bthe表示任何以the為起始的字符串
\Bthe表示任何包含但不以the為起始的字符串
2.4 創建字符集
[ ] 用來創建特定字符集,它的功能類似 |,例如[ab] = a | b
注意:[ab][c] 匹配 ac 或 bc, 不同於 ab | c
2.5 限定范圍和否定
除了單字符以外,字符集還支持匹配指定的字符范圍,涉及連字符(-)和脫字符(^)。
注意:[a-z]表示a-z任意一個;[^aeiou]表示一個非元音字符
2.6 使用閉包操作符實現存在性和頻數匹配
閉包操作符:*、+
注意:貪婪匹配時默認匹配盡可能多字符,閉包操作符是貪婪的,?是非貪婪的
2.7 表示字符集的特殊字符
特殊字符也可以表示字符集,例如 \d 表示 [0-9],\w 表示 [A-Za-z0-9]等。
注意:這些特殊字符的大寫表示意義恰恰相反,表不匹配
2.8 使用圓括號指定分組
圓括號的兩個功能:
- 對正則表達式進行分組
- 匹配子組
注意:匹配子組是為了看到匹配表達模式的字符串各部分內容,例如,(\w+)-(\d+)可以分別訪問每一個子組
2.9 擴展表示法
擴展表示法的模式:(?p
注意:擴展表示法往往表條件,例如,(?=.com) 表示如果后面跟着 ".com" 才做匹配操作