更多課程 選擇中心

Python培訓
美國上市教育機構

400-111-8989

Python培訓

達內Python培訓教程:Python正則表達式解析

  • 發布: 楓葉
  • 來源:數量分析學習筆記
  • 時間:2018-11-08 14:48

在用Python網頁爬蟲時,我們經常使用xpath,beautifulsoup等一些工具包輔助來實現解析網頁代碼,獲取我們需要的內容。

這些工具雖然方便,但有時候找不到規則的時候,使用最基本的方法,即:正則表達式,能更加便捷。另外,正則表達式,不僅僅在python中的認可,其他軟件中字符識別同樣可用,可以算得上是字符匹配中的“通用語言”。

那么正則表達式是什么呢?

正則表達式:就是用于描述字符串排列的一套規則。我們用這個規則去匹配查找可以匹配的上的字符串。

基本思想:

存在一個文本信息,里面存在一些我們需要的內容,也有很多我們不需要的內容,我們希望告訴計算機我們需要哪些內容,然后計算機幫助我們從文本中提取我們想要的內容。(我們告訴計算機文本獲取模式就是規則)

例如: 存在一個文本信息

string='021-2743908148937895749201892'

我們目的是提取里面的電話號碼:(021-27439081)

(這里我們有先驗信息:電話號碼的排列方式只可能兩種: 3位數字-8位數字 或者 4位數字-7位數字)

語言描述規則:在文本信息中去搜索符號 “-”,如果存在符號“-”,查看前面是3位還是4位,如果是3位, 如果是三位那么 “-”號前取3位,后取8位,得到電話號碼;如果“-”號前有4位,那么“-”前取4,后取7位,得到電話號碼。

正則表達式表示:"\d{4}-\d{7}|\d{3}-\d{8}"

上面兩種表達方式表達的是一個意思,只不過正則表達式是計算機可以識別的。 為了然計算機識別,所以需要規定具體的符號固定的意思,例如上面的表達式中:

\d 表示: 匹配任何一個十進制數

{m}表示:它前面的元素恰好出現m次, 所以\d{4}表達的意思就是,出現四次 十進制數

| 表示:“或者”的意思

將這些符號意思還原到正則表達式中,翻譯出來,就是語言描述的那個規則。

我們用python語言來識別代碼如下:

import re # re包用來做 正則表達式匹配

pattern="\d{4}-\d{7}|\d{3}-\d{8}" # 我們定義正則表達式,也就是字符規則

string='021-2743908148937895749201892' # 這是我們希望從中搜索的字符

result=re.search(pattern,string) # 告訴計算機,讓它按照pattern的規則在string里面去 找能匹配的上的字符串

print(result) # 輸入得到的結果

輸入結果如下:

<_sre.SRE_Match object; span(0,12) match='021-27439081'>

這里:span(0,12)是說匹配的位置是0~12位; 匹配的內容是: 021-27439081

通過這個例子可以看出:

正則表達式就是用有固定意義的字符描述一個搜索規則,這個搜索規則恰好是取匹配我們在文本信息中需要的內容。

為了能去表達足夠復雜的規則,需要有很多的 有固定意義的符號,下面給出常用的符號:

----------------------------------------------------------------------

\w 匹配任意字母,數字或下劃線;

\W 匹配除字母,數字或下劃線 以外的任意字符;

\d 匹配任意10進制數

\D 匹配任意除10進制外的數

\s 匹配任意一個空白字符

\S 匹配除空白字符外的任意一個其他字符

. 匹配除換行符以外任意一個字符

^x 匹配字符串的開始位置,即必須以x開始;

$x 匹配字符串的結束位置,即必須以x結尾

x* 匹配前面的原子x 出現0次,1次或者多次

x? 匹配0次或者1次前面的原子x

x+ 匹配1次或者多次前面的原子x

x{n} 前面的原子x恰好出現n次

x{n,m} 前面的原子至少出現n次,至多出現m次

| 模式選擇符,可以設置多個模式:表示“或者”的意思

() 模式單元符,(cd){1,}表示cd整體至少出現一次; cd{1,}則表示d至少出現一次

\n 匹配換行,是換行符

存在一些匹配修正符號,使用規則是: re.research(pattern,string,re.修正符)

I 匹配時忽略大小寫 (符號是 i 的大寫,不是或者的那個符號)

M 多行匹配

L 做本地化識別匹配

U 根據Unicode字符及解析字符

S 讓.匹配包括換行符

----------------------------------------------------------------------------------------------------

通過上面各種符號的靈活組合就可以去匹配任何你想要的規則,搜索到你想要的文本信息。

---------------------------------------------------------------------------------------

補充常用re包里面的函數:

result=re.search(pattern,string,re.修正符) :在整個文本信息里面去搜索 ( 最多搜索一個匹 配上的內容就停止搜索 )

result.span() 得到匹配結果的位置;

result.match() 得到規則下匹配的結果內容;

re.match(pattern,string.re.修正符): 從文本信息的起始位置搜索

re.compile(pattern,string.re.修正符): 在整個的文本信息中搜索,有多少匹配的上的,都搜 索出來

re.sub(pattern,rep,string,max) : 用pattern規則在string里面搜索匹配的內容,并且將匹配 上的字符替換成rep里面的內容, 最多匹配max次。

-----------------------------------------------------------------------------------------------------

雖然現在很多包能方便的匹配,但熟練使用正則表達式匹配,很多時候反而更加方便,而且使用起來較為靈活。

還有一個作用,用起來比較炫呀,寫一大串莫名其妙的符號,挑戰自己的邏輯思維;

計算機學好的,用DOS命令來執行各種任務;

統計,計量學的好的,excel來做各種復雜模型......

本文內容轉載自網絡,本著分享與傳播的原則,版權歸原作者所有,如有侵權請聯系我們進行刪除!

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

上一篇:差評近一半,用 Python 分析胡歌的《獵場》到底值不值得看?
下一篇:Python運維自動化開發之Paramiko模塊

如何運用Python編程處理大數據?用Python編程處理大數據的技巧是什么?

Python面向對象編程的知識點都在這了!

Python的高級特征及用法(部分)

聽說這些Python知識,很少有人知道!

選擇城市和中心
黑龍江省

吉林省

河北省

湖南省

貴州省

云南省

廣西省

海南省

亚洲Av -宅男色影视,首长不要好深h,gogo人体高清大胆专