
文章插圖
前言正則表達式作為一名合格的程序員的必備的基本技術(shù)之一,其有用性不言而喻 。但是它為什么會非常難以掌握,甚至想用一用也都感覺難以下手呢?本文將會讓你一次就看會如何使用Python正則表達式 。
1. 正則表達式的組成
在介紹如何使用Python的正則表達式時,我們需要先認識一下正則表達式的各種功能,以及其組成形式如何 。
正則表達式可以從非結(jié)構(gòu)化的文本中提取到我們想要的內(nèi)容,其本質(zhì)為模式匹配,也是體現(xiàn)出智能化的最初手段,現(xiàn)在已經(jīng)廣泛應(yīng)用于自動化處理信息的流程之中,從爬蟲到人工智能,無處不在,其需求也是相當(dāng)?shù)拇?。
一提及正則表達式的編寫,在N多的博客里都提到了一個神奇的網(wǎng)站http://www.txt2re.com/,這個網(wǎng)站我之前也用過,如果你不會正則表達式,又想偷懶自動生成,你只需要在這個網(wǎng)站里復(fù)制粘貼一個最復(fù)雜的情況,然后把你想匹配的內(nèi)容通過可視化的點擊組合就可以自動生成你想要的正則表達式 。
但是遺憾的是,這個網(wǎng)站目前已經(jīng)打不開了 。這也正是告訴我們,核心技術(shù)掌握在自己手里才是真啊 。現(xiàn)在我們來看看正則表達式該如何編寫 。下面是使用進行正則表達式的一般流程,不同的語言其實現(xiàn)方法不完全相同,我們今天主要聚焦與使用python進行正則表達式的三種匹配方式,以獲得我們想要的目標片段,對于其他方法,我們以后再進行講解 。
首先確定你的輸入的大致格式
在這個輸入的大致格式中定位到你需要的內(nèi)容,以及你不需要的內(nèi)容 。
通過正則表達式將其匹配出來
抽取其臨時的結(jié)果將其保存到我們需要的數(shù)據(jù)結(jié)構(gòu)中
2. 使用python表示正則表達式流程
如果我們使用python進行一個正則表達式正則時,我們主要經(jīng)歷一下幾個步驟:
導(dǎo)入包
根據(jù)需求指定正則表達式
編譯自定義的表達式
根據(jù)其表達式進行匹配
輸出結(jié)果
1,3,5都是相對容易的部分,而其中最難的部分主要有兩步,一個是制定一個符合需求的正則表達式,另一個則是如何進行匹配 。我們最后會簡單的介紹一下輸出結(jié)果 。
3. 編寫正則表達式
編寫正則表達式是其中的核心,如何編寫正確的,符合我們想法的表達式呢?我們這里介紹下面兩個部分進行構(gòu)建:
原封不動的單詞
這一部分并不是我們需要的,只是一些留存在我們需要的內(nèi)容中間的部分 。原封不動的單詞就原封不動的抄寫上去,不要增加格外的形式 。
待匹配的部分
這一部分使我們想抽取出的內(nèi)容,將我們想匹配的部分使用正則表達式進行表達分為兩個部分,一個部分為我們的匹配的字符,例如:
w 匹配字母數(shù)字及下劃線W 匹配非字母數(shù)字及下劃線s 匹配任意空白字符,等價于 [tnrf].S 匹配任意非空字符d 匹配任意數(shù)字,等價于 [0-9].D 匹配任意非數(shù)字A 匹配字符串開始Z 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串 。z 匹配字符串結(jié)束G 匹配最后匹配完成的位置 。b 匹配一個單詞邊界,也就是指單詞和空格間的位置 。例如,‘erb’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’ 。B 匹配非單詞邊界 。‘erB’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’ 。n, t, 等. 匹配一個換行符 。匹配一個制表符 。等1…9 匹配第n個分組的內(nèi)容 。10 匹配第n個分組的內(nèi)容,如果它經(jīng)匹配 。否則指的是八進制字符碼的表達式 。另一種,則是匹配的模式,決定我們?nèi)绾芜M行匹配:^ 匹配字符串的開頭$ 匹配字符串的末尾 。. 匹配任意字符,除了換行符,當(dāng)re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符 。[…] 用來表示一組字符,單獨列出:[amk] 匹配 ‘a(chǎn)’,‘m’或’k’[^…] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符 。re* 匹配0個或多個的表達式 。re+ 匹配1個或多個的表達式 。re? 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式re{ n} 精確匹配 n 個前面表達式 。例如,o{2} 不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的兩個 o 。re{ n,} 匹配 n 個前面表達式 。例如,o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o ?!皁{1,}” 等價于 “o+” ?!皁{0,}” 則等價于 “o*” 。re{ n, m} 匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式a| b 匹配a或b(re) 對正則表達式分組并記住匹配的文本(?imx) 正則表達式包含三種可選標志:i, m, 或 x。只影響括號中的區(qū)域 。(?-imx) 正則表達式關(guān)閉 i, m, 或 x 可選標志 。只影響括號中的區(qū)域 。(?: re) 類似 (…), 但是不表示一個組(?imx: re) 在括號中使用i, m, 或 x 可選標志(?-imx: re) 在括號中不使用i, m, 或 x 可選標志(?#…) 注釋.(?= re) 前向肯定界定符 。如果所含正則表達式,以 … 表示,在當(dāng)前位置成功匹配時成功,否則失敗 。但一旦所含表達式已經(jīng)嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊 。(?! re) 前向否定界定符 。與肯定界定符相反;當(dāng)所含表達式不能在字符串當(dāng)前位置匹配時成功(?> re) 匹配的獨立模式,省去回溯 。兩者搭配即可完成我們想要的結(jié)果,雖然這里列舉了很多,但是我們常用的就那幾個,正則表達式的簡單劃分將正則表達式劃分為元字符、反義、量詞和懶惰限定詞 。我會在后面的部分給出一個實例 。當(dāng)我們的正則表達式撰寫完畢后,我們使用下面的函數(shù)獲得我們的匹配模板 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- Python編程從入門到實踐 python高性能編程怎么樣
- python命令行運行py文件 python運行文件指令
- python入門教程 爬蟲和python什么關(guān)系和區(qū)別
- python語言基礎(chǔ)知識 python零基礎(chǔ)教程
- python退出程序代碼大全 python停止程序運行快捷鍵
- 學(xué)python需要的基礎(chǔ)知識 python教學(xué)設(shè)計
- 數(shù)據(jù)分析用python還是bi powerbi使用教程
- python貪吃蛇最簡單代碼 python的idle怎么用
- python四則運算器編寫 idea安裝python插件配置
- linux搭建python環(huán)境 linux下安裝python模塊
