乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python標準庫01 正則表達式 (re包)

       imelee 2016-12-23

      作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉(zhuǎn)載,也請保留這段聲明。謝謝!

       

      我將從正則表達式開始講Python的標準庫。正則表達式是文字處理中常用的工具,而且不需要額外的系統(tǒng)知識或經(jīng)驗。我們會把系統(tǒng)相關(guān)的包放在后面講解。

       

      正則表達式(regular expression)主要功能是字符串(string)中通過特定的模式(pattern),搜索想要找到的內(nèi)容。

      語法

      之前,我們簡介了字符串相關(guān)的處理函數(shù)。我們可以通過這些函數(shù)實現(xiàn)簡單的搜索功能,比如說從字符串“I love you”中搜索是否有“you”這一子字符串。但有些時候,我們只是模糊地知道我們想要找什么,而不能具體說出我是在找“you”,比如說,我想找出字符串中包含的數(shù)字,這些數(shù)字可以是0到9中的任何一個。這些模糊的目標可以作為信息寫入正則表達式,傳遞給Python,從而讓Python知道我們想要找的是什么。

      (官方documentation)

      在Python中使用正則表達式需要標準庫中的一個包re

      import re
      m = re.search('[0-9]','abcd4ef')
      print(m.group(0))

      re.search()接收兩個參數(shù),第一個'[0-9]'就是我們所說的正則表達式,它告訴Python的是,“聽著,我從字符串想要找的是從0到9一個數(shù)字字符”。

      re.search()如果從第二個參數(shù)找到符合要求的子字符串,就返回一個對象m,你可以通過m.group()的方法查看搜索到的結(jié)果。如果沒有找到符合要求的字符,re.search()會返回None。

       

      如果你熟悉Linux或者Perl, 你應(yīng)該已經(jīng)熟悉正則表達式。當(dāng)我們打開Linux shell的時候,可以用正則表達式去查找或著刪除我們想要的文件,比如說:

      $rm book[0-9][0-9].txt

      這就是要刪除類似于book02.txt的文件。book[0-9][0-9].txt所包含的信息是,以book開頭,后面跟兩個數(shù)字字符,之后跟有".txt"的文件名。如果不符合條件的文件名,比如說:

      bo12.txt

      book1.txt

      book99.text

      都不會被選中。

      Perl中內(nèi)建有正則表達式的功能,據(jù)說是所有正則表達式系統(tǒng)中最強的,這也是Perl成為系統(tǒng)管理員利器的一個原因。

       

      正則表達式的函數(shù)

      m = re.search(pattern, string)  # 搜索整個字符串,直到發(fā)現(xiàn)符合的子字符串。
      m = re.match(pattern, string)   # 從頭開始檢查字符串是否符合正則表達式。必須從字符串的第一個字符開始就相符。

      可以從這兩個函數(shù)中選擇一個進行搜索。上面的例子中,我們?nèi)绻褂胷e.match()的話,則會得到None,因為字符串的起始為‘a(chǎn)’, 不符合'[0-9]'的要求。

      對于返回的m, 我們使用m.group()來調(diào)用結(jié)果。(我們會在后面更詳細解釋m.group())

       

      我們還可以在搜索之后將搜索到的子字符串進行替換

      str = re.sub(pattern, replacement, string) 
      # 在string中利用正則變換pattern進行搜索,對于搜索到的字符串,用另一字符串replacement替換。返回替換后的字符串。

       

      此外,常用的正則表達式函數(shù)還有

      re.split()    # 根據(jù)正則表達式分割字符串, 將分割后的所有子字符串放在一個表(list)中返回

      re.findall()  # 根據(jù)正則表達式搜索字符串,將所有符合的子字符串放在一給表(list)中返回

       

      (在熟悉了上面的函數(shù)后,可以看一下re.compile(),以便于提高搜索效率。)

       

      寫一個正則表達式

      關(guān)鍵在于將信息寫成一個正則表達式。我們先看正則表達式的常用語法:

      1)單個字符:

      .          任意的一個字符

      a|b        字符a字符b

      [afg]      a或者f或者g的一個字符        

      [0-4]      0-4范圍內(nèi)的一個字符

      [a-f]      a-f范圍內(nèi)的一個字符

      [^m]       不是m的一個字符

      \s         一個空格

      \S         一個非空格

      \d         [0-9]

      \D         [^0-9]

      \w         [0-9a-zA-Z]

      \W         [^0-9a-zA-Z]

       

      2)重復(fù)

      緊跟在單個字符之后,表示多個這樣類似的字符

      *         重復(fù) >=0

      +         重復(fù) >=1

               重復(fù) 0或者1

      {m}       重復(fù)m次。比如說 a{4}相當(dāng)于aaaa,再比如說[1-3]{2}相當(dāng)于[1-3][1-3]

      {m, n}    重復(fù)m到n次。比如說a{2, 5}表示a重復(fù)2到5次。小于m次的重復(fù),或者大于n次的重復(fù)都不符合條件。

       

      正則表達          相符的字符串舉例

      [0-9]{3,5}       9678

      a?b              b

      a+b              aaaaab

       

      3) 位置

      ^         字符串的起始位置

      $         字符串的結(jié)尾位置

       

      正則表達          相符的字符串舉例        不相符字符串

      ^ab.*c$          abeec               cabeec (如果用re.search(), 將無法找到。)


      4)返回控制

      我們有可能對搜索的結(jié)果進行進一步精簡信息。比如下面一個正則表達式:

      output_(\d{4})

      該正則表達式用括號()包圍了一個小的正則表達式,\d{4}。 這個小的正則表達式被用于從結(jié)果中篩選想要的信息(在這里是四位數(shù)字)。這樣被括號圈起來的正則表達式的一部分,稱為群(group)。
      我們可以m.group(number)的方法來查詢?nèi)骸roup(0)是整個正則表達的搜索結(jié)果,group(1)是第一個群……

      import re
      m = re.search("output_(\d{4})", "output_1986.txt")
      print(m.group(1))

       

      我們還可以將群命名,以便更好地使用m.group查詢:

      import re
      m = re.search("output_(?P<year>\d{4})", "output_1986.txt")   #(?P<name>...) 為group命名
      print(m.group("year"))

       

      練習(xí)
      有一個文件,文件名為output_1981.10.21.txt 。下面使用Python: 讀取文件名中的日期時間信息,并找出這一天是周幾。將文件改名為output_YYYY-MM-DD-W.txt (YYYY:四位的年,MM:兩位的月份,DD:兩位的日,W:一位的周幾,并假設(shè)周一為一周第一天)

       

       

      總結(jié)

      re.search() re.match() re.sub() re.findall()

      正則表達式構(gòu)成方法

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多