文章目錄
一.基本介紹
正則表達式又稱規範表達式,它是一個用於處理字符串的強大工具,通常被用來檢索和替換那些符合規則的文本。Python的re模塊提供了對正則表達式的支持。
二.re模塊中的常用方法
方法 | 基本解釋 |
---|---|
def match(pattern, string, flags=0) | 在字符串開頭應用模式,返回匹配對象,如果找不到匹配,則爲“無” |
def search(pattern, string, flags=0) | 掃描整個字符串,查找與模式的匹配項,返回一個匹配對象,如果找不到匹配,則爲“無” |
def split(pattern, string, maxsplit=0, flags=0) | 按出現的模式拆分源字符串,返回包含結果子字符串的列表。 |
def findall(pattern, string, flags=0) | 掃描整個字符串,查找與模式的匹配項,返回包含結果子字符串的列表 |
def compile(pattern, flags=0) | 編譯正則表達式模式,返回模式對象 |
三.參數flags規則選項總結
flags規則 | 基本解釋 |
---|---|
re.I | 使匹配對大小寫不敏感 |
re.L | 做本地化識別(locale-aware)匹配 |
re.M | 多行匹配,影響 ^ 和 $ |
re.S | 把所有行當成一行匹配 |
re.U | 根據Unicode字符集解析字符。這個標誌影響 \w, \W, \b, \B. |
re.X | 該標誌通過給予你更靈活的格式以便你將正則表達式寫得更易於理解。 |
四.正則表達式模式語法中的特殊元素
特殊符號 | 基本解釋 |
---|---|
^ | 匹配字符串的開頭 |
$ | 匹配字符串的末尾 |
. | 匹配任意字符,除了換行符 |
[…] | 用來表示一組字符,比如:[abc] 匹配 ‘a’,‘b’或’c’ |
[^…] | 不在[]中的字符:比如:[^abc] 匹配除了a,b,c之外的字符 |
* | 匹配0個或多個的表達式 |
+ | 匹配1個或多個的表達式 |
? | 匹配0個或1個由前面的正則表達式定義的片段,惰性匹配方式 |
{ n,} | 精確匹配n個到多個表達式 |
{ n, m} | 匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪匹配方式 |
a|b | 匹配a或b |
(re) | 匹配括號內的表達式,也表示一個組 |
\w | 匹配包括下劃線的任何單詞字符。等價於’[A-Za-z0-9_]’。 |
\W | 匹配任何非單詞字符。等價於 ‘[^A-Za-z0-9_]’。 |
\s | 匹配任意空白字符,等價於 [\t\n\r\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意數字,等價於 [0-9] |
\D | 匹配任意非數字 |
\A | 匹配字符串的開頭。它和 ’^’ 的區別是, ’/A’ 只匹配整個字符串的開頭,即使在 ’M’ 模式下,它也不會匹配其它行的行首 |
\Z | 匹配字符串的結尾。它和 ’$’ 的區別是, ’/Z’ 只匹配整個字符串的結尾,即使在 ’M’ 模式下,它也不會匹配其它各行的行尾 |
\z | 匹配字符串結束 |
\G | 匹配最後匹配完成的位置 |
\b | 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’ |
\B | 匹配非單詞邊界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’ |
\n, \t, 等 | 匹配一個換行符。匹配一個製表符等 |
五.常用操作
1.精確指定匹配的次數 { n,m}
{ n,m}符號就可以控制匹配次數,表示匹配n位到m位的字符串
{n,} 表示匹配n位以上的字符串
{,m} 表示匹配m位以下的字符串
Python正則表達式前的 r 表示原生字符串(rawstring),該字符串聲明瞭引號中的內容表示該內容的原始含義,避免了多次轉義造成的反斜槓困擾。
代碼演示
2.非捕獲組 (?:pattern )
(?:pattern )表示匹配pattern,但不捕獲匹配結果。
3.捕獲組 (pattern)
(pattern)表示匹配pattern並捕獲結果
4.前向界定與後向界定
有時候需要匹配某個內容或者某個內容之前的內容,比如str = “love中國China” 匹配中國二字就在love之後,China之前。
Python 提供一個簡便的前向界定和後向界定功能,或者叫前導指定和跟從指定功能。它們是:
(?<=…) 前向界定
括號中 … 代表你希望匹配的字符串的前面應該出現的字符串。
(?=…) 後向界定
括號中的 … 代表你希望匹配的字符串後面應該出現的字符串。
前向界定和後向界定同時使用
前向界定單獨使用
後向界定單獨使用