正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。
正則表達式
常用操作符
操作符 | 說明 | 實例 |
---|---|---|
. |
. 表示任何單個字符 | |
[] |
字符集,對單個字符給出取值範圍` | 表示a、b、c,[a‐z]表示a到z單個字符 |
[^] |
非字符集,對單個字符給出排除範圍 | [\^abc] 表示非a或b或c的單個字符 |
* |
前一個字符0次或無限次擴展 | abc\* 表示ab、abc、abcc、abccc等 |
+ |
前一個字符1次或無限次擴展 | abc+ 表示abc、abcc、abccc等 |
? |
前一個字符0次或1次擴展 | abc? 表示ab、abc |
| |
左右表達式任意一個 | abc\|def 表示abc、def |
{m} |
擴展前一個字符m次 | ab{2}c 表示abbc |
{m,n} |
擴展前一個字符m至n次(含n) | ab{1,2}c 表示abc、abbc |
^ |
匹配字符串開頭 | ^abc 表示abc且在一個字符串的開頭 |
$ |
匹配字符串結尾 | abc$ 表示abc且在一個字符串的結尾 |
( ) |
分組標記,內部只能使用| 操作符 |
(abc) 表示abc,(abc|def) 表示abc、def |
\d |
數字,等價於[0‐9] | |
\w |
單詞字符,等價於[A‐Za‐z0‐9_] |
經典正則表達式實例
IP地址的精確寫法
0‐99: [1‐9]?\d
100‐199: 1\d{2}
200‐249: 2[0‐4]\d
250‐255: 25[0‐5]
(([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])
Re庫
re庫採用raw string類型表示正則表達式,表示爲:r’text’
建議:當正則表達式包含轉義符時,使用raw string
函數 | 說明 |
---|---|
re.search() | 在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象 |
re.match() | 從一個字符串的開始位置起匹配正則表達式,返回match對象 |
re.findall() | 搜索字符串,以列表類型返回全部能匹配的子串 |
re.split() | 將一個字符串按照正則表達式匹配結果進行分割,返回列表類型 |
re.finditer() | 搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象 |
re.sub() | 在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串 |
re.search(pattern, string, flags=0)
在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象
- pattern : 正則表達式的字符串或原生字符串表示
- string : 待匹配字符串
- flags : 正則表達式使用時的控制標記
re.match(pattern, string, flags=0)
從一個字符串的開始位置起匹配正則表達式,返回match對象
- pattern : 正則表達式的字符串或原生字符串表示
- string : 待匹配字符串
- flags : 正則表達式使用時的控制標記
re.findall(pattern, string, flags=0)
搜索字符串,以列表類型返回全部能匹配的子串
- pattern : 正則表達式的字符串或原生字符串表示
- string : 待匹配字符串
- flags : 正則表達式使用時的控制標記
re.split(pattern, string, maxsplit=0, flags=0)
將一個字符串按照正則表達式匹配結果進行分割,返回列表類型
- pattern : 正則表達式的字符串或原生字符串表示
- string : 待匹配字符串
- maxsplit: 最大分割數,剩餘部分作爲最後一個元素輸出
- flags : 正則表達式使用時的控制標記
re.finditer(pattern, string, flags=0)
搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象
- pattern : 正則表達式的字符串或原生字符串表示
- string : 待匹配字符串
- flags : 正則表達式使用時的控制標記
re.sub(pattern, repl, string, count=0, flags=0)
在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串
- pattern : 正則表達式的字符串或原生字符串表示
- repl : 替換匹配字符串的字符串
- string : 待匹配字符串
- count : 匹配的最大替換次數
- flags : 正則表達式使用時的控制標記
regex = re.compile(pattern, flags=0)
將正則表達式的字符串形式編譯成正則表達式對象
- pattern : 正則表達式的字符串或原生字符串表示
- flags : 正則表達式使用時的控制標記
Re庫的另一種等價用法
函數 | 說明 |
---|---|
regex.search() |
在一個字符串中搜索匹配正則表達式的第一個位置,返回match對象 |
regex.match() |
從一個字符串的開始位置起匹配正則表達式,返回match對象 |
regex.findall() |
搜索字符串,以列表類型返回全部能匹配的子串 |
regex.split() |
將一個字符串按照正則表達式匹配結果進行分割,返回列表類型 |
regex.finditer() |
搜索字符串,返回一個匹配結果的迭代類型,每個迭代元素是match對象 |
regex.sub() |
在一個字符串中替換所有匹配正則表達式的子串,返回替換後的字符串 |
Re庫的Match對象
Match對象是一次匹配的結果,包含匹配的很多信息
In[43]: match=re.match(r'[A-Z]+', 'Start HBU河北大學簡稱HBU')
In[44]: type(match)
Out[44]: re.Match
Match對象的屬性
屬性 | 說明 |
---|---|
.string |
待匹配的文本 |
.re |
匹配時使用的patter對象(正則表達式) |
.pos |
正則表達式搜索文本的開始位置 |
.endpos |
正則表達式搜索文本的結束位置 |
Match對象的方法
方法 | 說明 |
---|---|
.group(0) |
獲得匹配後的字符串 |
.start() |
匹配字符串在原始字符串的開始位置 |
.end() |
匹配字符串在原始字符串的結束位置 |
.span() |
返回(.start(), .end()) |
最小匹配操作符
操作符 | 說明 |
---|---|
*? |
前一個字符0次或無限次擴展,最小匹配 |
+? |
前一個字符1次或無限次擴展,最小匹配 |
?? |
前一個字符0次或1次擴展,最小匹配 |
{m,n}? |
擴展前一個字符m至n次(含n),最小匹配 |