
作者:極光
來源:Python 技術(shù)
正則表達式相信大家應(yīng)該都不陌生,本質(zhì)上就是一種微小的、高度專業(yè)化的編程語言,使用它你可以為要匹配的可能字符串集指定規(guī)則。大多數(shù)編程語言正則語法基本相似,只是實現(xiàn)正則的函數(shù)庫不同,今天就來跟大家一起了解下 Python 支持正則表達式的函數(shù)。
正則最簡單的應(yīng)用,就是對字符串進行操作,用來找出想要匹配的字符串,比如 Python 就只會匹配字符串 Python ,當(dāng)然也可以設(shè)置不區(qū)分大小寫,這樣就可以匹配更多,比如 python、pyThon等。
如果還想來點復(fù)雜的匹配要怎么做,這就需要用到元字符了,下面就是所有的元字符:
// 元字符 [ ] ( ) . ^ $ * + ? { } |
這一對元字符主要用于指定字符類,也就是你想要匹配的一組字符。
比如:[asd] 就是要匹配任何字符 a, s, d,但如果想匹配 a b c d e …… x y z 是不是要把所有的都寫一遍?當(dāng)然不是了,這個我們可以寫成 [a-z] 就行了,- 就是用來表示一個范圍,再比如表示數(shù)字 1 至 9,可以寫成 [1-9] 。
上面說的是包含的字符范圍,如果想匹配不包含的范圍要怎么做?這就要用到元字符 ^,比如匹配除了 n, u, 3 之外的字符,可以寫成 [^nu3]。
還有一點需要注意,在 [ ] 中的元字符會作為普通字符匹配,比如 [$+] 就會匹配 $, +。
最后說下元字符 ,它的意義是用于轉(zhuǎn)義所有元字符,也就是去掉元字符的特殊性,比如 {$\,其實就是匹配字串 {, $, 。
上面說了 [a-z] 可以匹配所有小寫字母,[0-9] 用來匹配所有數(shù)字,這樣已經(jīng)夠簡單了,還有更簡單的幾種特殊范圍表達方式。
字符說明.匹配除 "n" 之外的任何單個字符。要匹配包括 'n' 在內(nèi)的任何字符,請使用象 '[.n]' 的模式。d相當(dāng)于[0-9],即匹配一個數(shù)字字符。D相當(dāng)于[^0-9],即匹配一個非數(shù)字字符。s相當(dāng)于[fnrtv],也就是匹配任何空白字符,包括空格、制表符、換頁符等等。S相當(dāng)于[^fnrtv],匹配任何非空白字符。w相當(dāng)于[a-zA-Z0-9_],匹配任何字母與數(shù)字字符。W相當(dāng)于[^a-zA-Z0-9_],匹配任何非字母與數(shù)字字符。
上面這些特殊序列可以包含在字符類中,比如 [sd,] 即匹配任何空白字符,數(shù)字和 ,。
只是做到匹配字符串集合,肯定是不夠的,它還有個更大的優(yōu)勢,那就是可以指定某一部分字符是重復(fù)的,并且可以指定重復(fù)的次數(shù)。
先說第一個表示重復(fù)的元字符 *,它用來指定前面一個字符可以重復(fù)0次或者多次。
比如 ap*le 將會匹配 apple,appple,ale 等等。
這里當(dāng)重復(fù)正則時,匹配引擎會嘗試盡可能多的重復(fù)它。當(dāng)發(fā)現(xiàn)模式的后續(xù)部分不匹配,則匹配引擎將會回退并以較少的重復(fù)次數(shù)再次嘗試。
另一個重復(fù)的元字符 +,它用來表示前一個字符可重復(fù)1次或多次。它跟 * 相比,其實就是少了一個重復(fù)0次,也就是上面 ap*le 換成 ap+le 不會出現(xiàn)匹配到 ale。
第三個元字符就是 ?,它用來表示前一個字符可重復(fù)0次或1次,把上面的例子換成 ap?le,其實就是兩個字符串 ale 或 aple。
最后一個復(fù)雜些就是 {m,n},這個表示前一個字符可重復(fù)次數(shù)是一個區(qū)間,也就是最少重復(fù)m次,最多重復(fù)n次。
例如 ap{2,3}le將會匹配 apple,appple 兩個字符串,其他都不會匹配。
在這里需要注意下,m 需要小于 n,當(dāng)然 m 或 n 也是可以省略的。比如當(dāng) m=0 時,可以省略 m,當(dāng) n 為無窮大時,也可以省略 n。
對!你沒看錯,如果想使用正則表達式,首先得要把它編譯成模式對象。編譯成對象后,它就可以使用各種操作方法了,比如字串匹配查詢或替換等。
Python 編譯的方法是 re.compile('正則表達式'),比如 re.compile('ap?le')。
當(dāng)然也可以傳一些特殊的參數(shù),比如忽略大小寫,那上面的編譯方法就可以寫成 re.compile('ap?le', re.IGNORECASE),這樣在匹配字串時就可以忽略大小寫了。
那除了這個還有別的參數(shù)嗎?有,下面我把一部分常用的參數(shù)列出來,對了參數(shù)還可以簡寫,比如剛才使用的 re.IGNORECASE 可以簡寫成 re.I,這樣就方便多了。
以下是常用編譯參數(shù):
參數(shù)簡寫說明IGNORECASEI忽略大小寫ASCIIA使幾個轉(zhuǎn)義(w、b、s和d)匹配僅與具有相應(yīng)特征屬性的 ASCII 字符匹配DOTALLS使 . 匹配任何字符,包括換行符LOCALEL進行區(qū)域設(shè)置感知匹配MULTILINEM多行匹配,影響 ^ 和 $VERBOSEX忽略正則字符串中的空格,除非空格位于字符類中或前面帶有未轉(zhuǎn)義的反斜杠,可以組織和縮進,還可以寫注釋
大部分都容易理解,只是最后一個參數(shù) VERBOSE 可能不太容易理解,這里給大家個官方的例子看下就理解了。
test = re.compile(r"""
&[#] # 數(shù)字開始部分
(
0[0-7]+ # 八進制
| [0-9]+ # 小數(shù)形式
| x[0-9a-fA-F]+ # 十六進制
)
; # 結(jié)束分號
""", re.VERBOSE)
其實上面說的編譯都只是在做準(zhǔn)備,準(zhǔn)備接下來要介紹的,正則表達式最重要的查詢匹配。
常用匹配方法:
上面這些方法,如果匹配成功,會返回一個對象實例,其中包含匹配相關(guān)的信息:起始和終結(jié)位置、匹配的子串以及其它信息。
// 示例代碼
import re
ret = re.compile('[0-9]+')
ret.match("apple") // 返回 None
ret.match("12189") // 返回 <re.Match object; span=(0, 5), match='12189'>
ret.match("121ab") // 返回 <re.Match object; span=(0, 3), match='121'>
好了,今天我們簡單介紹了下正則表達式,以及在 Python 中如何使用正則表達式,其實以上這些只是基礎(chǔ),后續(xù)還會為大家介紹更多。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10CDA 數(shù)據(jù)分析師:商業(yè)數(shù)據(jù)分析實踐的落地者與價值創(chuàng)造者 商業(yè)數(shù)據(jù)分析的價值,最終要在 “實踐” 中體現(xiàn) —— 脫離業(yè)務(wù)場景的分 ...
2025-09-10機器學(xué)習(xí)解決實際問題的核心關(guān)鍵:從業(yè)務(wù)到落地的全流程解析 在人工智能技術(shù)落地的浪潮中,機器學(xué)習(xí)作為核心工具,已廣泛應(yīng)用于 ...
2025-09-09SPSS 編碼狀態(tài)區(qū)域中 Unicode 的功能與價值解析 在 SPSS(Statistical Product and Service Solutions,統(tǒng)計產(chǎn)品與服務(wù)解決方案 ...
2025-09-09