• <nav id="wias0"><center id="wias0"></center></nav>
  • 更多課程 選擇中心

    Python培訓
    達內IT學院

    400-111-8989

    達內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知識,很少有人知道!

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    4438全国大成网人网站