數據的查找和提取[1]——正則表達式


正則表達式

正則表達式其實沒有大家說的那么神秘和困難,它是一種強大的字符串處理工具,有自己的一套書寫規則。首先,看一個簡答的例子來大致了解一下。

  1.1 舉例

        比如給出一個字符串

Hello my name i1s HiangX

        使用下面這個正則式子

^Hello\s\w\w\s\w{4}\s\w\d

就可以匹配到 ‘Hello my name i1' 這段字符串了

  在學習之前觀察這個亂糟糟的表達式或許會覺得很復雜,其實不然,它有着自己的規則:/s 用於匹配空白字符,/w 在這里用於匹配字母,/w{4} 在這里用於匹配四個字母

它的使用規則還有很多,具體見下方這個表格

python有很多強大的庫,其中re庫中有很多函數可以幫助我們運用正則表達式進行匹配,下面就介紹我認為常用的幾個

  1.2match

這個函數是從字符串的首部開始檢索與正則表達式匹配的字符串,具體的用法,還是用上面的例子來介紹一下

import re
content='Hello my name i1s HiangX'
result=re.match('^Hello\s\w\w\s\w{4}\s\w\d',content)
print(result)


輸出的結果和1.1相同,只是用程序進行表達。其中,match函數第一個參數是正則表達式,第二個參數是要匹配的內容

 

    1.2.1對提取的目標再匹配

  看完上面的例子,大家有沒有疑問,如何選擇提取字符串中的特定部分呢?這個問題早就已經解決啦,也就是用group這個函數!

還是上面的例子,如果正則表達式變成

^Hello\s(\w)\w\s\w{4}\s\w\d

  在輸出的時候使用print(result.group(1))就可以輸出加括號部分提取的內容。值得注意的是,通常在比如說數組等數據結構中,下標總是錯開一位,但是在這里比較特殊,正常的對齊,一定要注意!

    1.2.2貪婪匹配與非貪婪匹配

  還是剛才的例子

  假如正則表達式變成

^Hello\s.*\d
  那么匹配到的內容和上訪相同,相信大家可以看出來了 .* 這兩個的搭配,其實就是省略中間的字符,直到后面的字符。
現在在看另外一種方式:
^Hello.*\w
  這個式子的結果就不再是大家想象中的Hello m 而是整個句子!那是為什么呢?
其實,這種匹配方式叫做貪婪匹配,也就是盡可能多的匹配字符,所以上方那種情況會盡可能多的進行匹配,直到遇到最后一個字母X才結束

  那這個問題如何解決呢?出現了非貪婪匹配,和之前的相反,就是盡可能少的匹配字符,用的符號是 .*?
如果將上方的改成
^Hello.*?\w
  那么結果就會變成Hello m

再總結一下!貪婪匹配和非貪婪匹配區別就是:
符號:貪婪匹配用 .* 而非貪婪匹配用.*?
功能:貪婪匹配主要是盡可能多的進行匹配 而非貪婪匹配主要是盡可能少的進行匹配
所以,通常情況下使用非貪婪匹配比較多

    1.2.3轉義匹配

在使用的過程中,不可避免的遇到一些字符串中含有特殊的字符。

在遇到這種情況時,只用在特殊字符前加上\即可

 

注意:在分析html時,也經常會遇到換行符,這里的match不太能識別,所以要另外加上修飾符,常用的如下:

re.S 忽略換行符

re.I 大小寫不敏感

re.L 

re.M 多行進行匹配

re.U 使用Unicode字符集解析字符

re.X

  1.3 search()

  上一節中的match函數是從頭進行匹配,如果頭部不匹配,就直接失敗,在使用過程中顯然還不是很方便。然而這一節要介紹的search就不一樣了,一起來看看吧!這個方法是進行全文的搜索和匹配,並且返回第一個匹配成功的字符串,使用方法和match()相同

  1.4findall()

前面介紹過search是返回匹配成功的第一個字符串,那么這個方法是返回匹配到的所有字符串,但是返回的內容其實還是一個數組類型的數據,可以通過下標來選取匹配到的第幾個字符串

  1.5 sub()

  這個方法,在有些時候可以發揮很大的作用。比如說在整理html代碼的時候,有很多的標簽,如果我想從這些標簽中選取一部分數據出來,如果用提取的方法會很繁瑣,特別長。
  這時候,也可以選擇把多余的部分刪除掉,使整個html顯得更加簡潔,這里就是用到sub()函數進行解決
  result=re.sub('<a.*?>|</a>',html,re.S)用這個方法就可以把所有的a標簽全部去除,使結果更加簡潔一些

  1.6 compile()

這個函數主要運用了面向對象的思想,可以將一個正則表達式,compile成一個正則的對象,在后來程序的維護和改變的時候會更加的方便和靈活。


    以上就是對於正則表達式的簡單介紹,博主也在學習,想通過博客記錄成長,有問題歡迎提出,一起討論!下一篇介紹xpath的使用




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM