最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python for Informatics 第11章之正則表達式(四)

 更新時間:2016年04月21日 10:01:09   作者:徘徊在海島  
這篇文章主要介紹了Python for Informatics 第11章之正則表達式(四) 的相關(guān)資料,需要的朋友可以參考下

注:以下文章原文來自于Dr Charles Severance 的 《Python for Informatics》

11.3 組合查詢和抽取

  如果我們想以“X-”字符串開頭的行中找到數(shù)字,就像下面兩行字符串:

X-DSPAM-Confidence: 0.8475
X-DSPAM-Probability: 0.0000

  但我們不只是要任意行中的任意浮點數(shù),而是具備上面格式的行中的數(shù)字。

  我們可以創(chuàng)建以下正則表達式來選擇這樣的行:

^X-.*: [0-9.]+

  這個表達式的含義是以“X-”兩個字符開頭,后面跟了任意個字符“.*",接著是一個冒號":"和空格" ",在空格之后呢是一個及以上的數(shù)字或小數(shù)點“[0-9.]+”。大家要注意的是方括號中的"[.]"不是匹配任何字符,而是匹配真正的".",這與方括號外的"."要予以區(qū)分。

  這是一個非常緊湊的表達式,它將非常匹配我們感興趣的行:

import re
hand = open('mobx-short.txt')
for line in hand:
line = line.rstrip()
if re.search('^X-.*: [0-9.]+', line)
print(line) 

  當我們運行這個程序,我們可以看到我們想要的數(shù)據(jù)被完美的過濾顯示。

X-DSPAM-Confidence: 0.8475
X-DSPAM-Probability: 0.0000
X-DSPAM-Confidence: 0.6178
X-DSPAM-Probability: 0.0000

  但是我們必須使用split解決提取數(shù)字的問題。然而當這個問題簡單到能用split解決時,我們可以使用正則表達式的另一特點,一步達到查找和解析功能。

  圓括號()是正則表達式中的另一特殊字符。當我們添加圓括號至表達式中,在字符串的匹配過程中它們將被忽略,但是當你使用findall()時,圓括號表示你想整個正則表達式被匹配,但是你只抽取位于圓括號內(nèi)你感興趣的那部分字符串。

  所以我們對程序修改如下:

import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
x = re.findall('^X-.*: ([0-9.]+)', line)
if len(x) > 0 :
print(x) 

  我們在正則表達式中對匹配浮點數(shù)字部分添加圓括號,并且用findall()代替search(),返回我們想要的浮點數(shù)字部分。這個程序的輸出如下:

['0.8475']
['0.0000']
['0.6178']
['0.0000']
['0.6961']
['0.0000']
..

  雖然這些在列表中的數(shù)字還需要從字符串轉(zhuǎn)換為浮點數(shù),但是我們應(yīng)用正則表達式的能力同時查找和抽取了我們感興趣的的信息。

  下面是使用這個技巧的另一個案例。如果你查看文件,你會發(fā)現(xiàn)有許多行是這樣的格式:

Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772

  如果我們想用同樣的技巧抽取所有修訂號(行末尾的整數(shù)),我們可以這樣編寫代碼:

import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
x = re.findall('^Details:.*rev=([0-9]+)', line)
if len(x) > 0 :
print(x)

  我們的正則表達式的是這樣的,以"Details:"開頭,之后可以是任意字符”.*",然后是"rev=",最后是一個以上的數(shù)字。我們希望行是匹配整個正則表達式,但我們只需要圓括號中"[0-9]+"的數(shù)字。當我們運行程序時,將得到以下輸出:

['39772']
['39771']
['39770']
['39769']
...

  記住,"[0-9]+"是貪婪的,它將嘗試抽取任何可能的數(shù)字,所以我們得到的每個字符串都有五個數(shù)字。正則表達式庫在行的開頭和結(jié)尾兩個方向進行擴展,只到它數(shù)到一個非數(shù)字的字符。

  我們可以用正則表達式重做本書先前的一個練習。在這個練習中我們對每個郵件的時間感興趣,我們尋找的行的格式如下:

From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008

  并且我們想抽取每一行中日期中的小時信息。先前我們通過兩次調(diào)用split實現(xiàn)。第一次我們將行分離成單詞,然后我們對第五個單詞基于冒號再次分離,拉出我們感興趣的兩個字符。

  假定要查找的行是良好格式化的,那么只要想到少的代碼就可以實現(xiàn)。但是當你為確保程序中碰到不具備這樣格式而失效,而添加必要的錯誤檢驗(或者一個try/except塊)時,這個代碼將會膨脹到10-15行,并且難以讀懂。

  我們可以用下面的正則表達式使工作更簡單:

^From .* [0-9][0-9]:

  這個表達式的含義是以"From "開頭(注意空格),然后跟著任意個字符".*",接著又是一個空格,然后是兩個數(shù)字"[0-9][0-9]",再接著是一個冒號。我們要找的就是具備這樣格式的行。

  為了在findall中只抽出表示小時的兩位數(shù)字,我們將表達式修改如下:

^From .* ([0-9][0-9]):

 最后這個程序是這樣的:

import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
x = re.findall('ˆFrom .* ([0-9][0-9]):', line)
if len(x) > 0 : 
print(x)

  程序運行結(jié)果如下:

['09']
['18']
['16']
['15']
...

相關(guān)閱讀:

Python for Informatics 第11章 正則表達式(一)

Python for Informatics 第11章之正則表達式(二)

關(guān)于Python for Informatics 第11章之正則表達式(四)就給大家介紹到這里,希望對大家有所幫助。后續(xù)還會持續(xù)更新,更多精彩內(nèi)容敬請關(guān)注!

相關(guān)文章

  • pandas?dataframe按照列名給列排序三種方法

    pandas?dataframe按照列名給列排序三種方法

    這篇文章主要給大家介紹了關(guān)于pandas?dataframe按照列名給列排序的三種方法,在進行數(shù)據(jù)分析操作時,經(jīng)常需要對數(shù)據(jù)按照某行某列排序,或者按照多行多列排序,以及按照索引值排序等等,需要的朋友可以參考下
    2023-07-07
  • 基于Python實現(xiàn)簡易文檔格式轉(zhuǎn)換器

    基于Python實現(xiàn)簡易文檔格式轉(zhuǎn)換器

    這篇文章主要介紹了基于Python和PyQT5實現(xiàn)簡易的文檔格式轉(zhuǎn)換器,支持.txt/.xlsx/.csv格式的轉(zhuǎn)換。感興趣的小伙伴可以跟隨小編一起學習一下
    2021-12-12
  • python 解決tqdm模塊不能單行顯示的問題

    python 解決tqdm模塊不能單行顯示的問題

    這篇文章主要介紹了python 解決tqdm模塊不能單行顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • tensorflow 實現(xiàn)打印pb模型的所有節(jié)點

    tensorflow 實現(xiàn)打印pb模型的所有節(jié)點

    今天小編就為大家分享一篇tensorflow 實現(xiàn)打印pb模型的所有節(jié)點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python數(shù)據(jù)的標準輸出與格式化輸出

    Python數(shù)據(jù)的標準輸出與格式化輸出

    這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)的標準輸出與格式化輸出的相關(guān)資料,和大多數(shù)語言一樣,Python也是用print()函數(shù)來進行輸出,需要的朋友可以參考下
    2023-08-08
  • python 對dataframe下面的值進行大規(guī)模賦值方法

    python 對dataframe下面的值進行大規(guī)模賦值方法

    今天小編就為大家分享一篇python 對dataframe下面的值進行大規(guī)模賦值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Django添加bootstrap框架時無法加載靜態(tài)文件的解決方式

    Django添加bootstrap框架時無法加載靜態(tài)文件的解決方式

    這篇文章主要介紹了Django添加bootstrap框架時無法加載靜態(tài)文件的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • pandas讀取中文xlsx文件出現(xiàn)的問題

    pandas讀取中文xlsx文件出現(xiàn)的問題

    這篇文章主要介紹了pandas讀取中文xlsx文件出現(xiàn)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解Python中下劃線的5種含義

    詳解Python中下劃線的5種含義

    本文介紹了Python中單下劃線和雙下劃線的各種含義和命名約定,名稱修飾的工作原理,以及它如何影響你自己的Python類,感興趣的可以了解一下
    2021-07-07
  • python中的信號通信 blinker的使用小結(jié)

    python中的信號通信 blinker的使用小結(jié)

    信號是一種通知或者說通信的方式,信號分為發(fā)送方和接收方,信號的特點就是發(fā)送端通知訂閱者發(fā)生了什么,今天通過本文給大家介紹python中的信號通信 blinker的相關(guān)知識,感興趣的朋友一起看看吧
    2021-10-10

最新評論

忻城县| 新余市| 扎鲁特旗| 葫芦岛市| 郓城县| 康平县| 临漳县| 奇台县| 定西市| 鲁甸县| 繁昌县| 柏乡县| 凤凰县| 南涧| 山丹县| 微山县| 额敏县| 龙川县| 黄骅市| 石家庄市| 蓬安县| 贞丰县| 抚远县| 瑞昌市| 嘉峪关市| 济源市| 宁南县| 金沙县| 阿克| 句容市| 镇赉县| 肥城市| 南丰县| 分宜县| 横峰县| 望江县| 定远县| 浦江县| 平阳县| 余江县| 洪洞县|