亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python正則中最短匹配實現(xiàn)代碼

 更新時間:2018年01月16日 21:28:24   作者:陌上行走  
這篇文章主要介紹了python正則中最短匹配實現(xiàn)代碼,需要的朋友可以參考下

下面從一個例子入手:

利用正則表達式解析下面的XML/HTML標(biāo)簽:

<composer>Wolfgang Amadeus Mozart</composer>
<author>Samuel Beckett</author> 
<city>London</city> 

希望自動格式化重寫為:

composer: Wolfgang Amadeus Mozart
author: Samuel Beckett
city: London

一個代碼是這樣的形式:

#coding:utf-8 
import re 
s="""<composer>WolfgangAmadeus Mozart</composer> 
   <author>SamuelBeckett</author> 
   <city>London</city>""" 
pattern1=re.compile("<\w+>")  #匹配<>中任意的字符 
pattern2=re.compile(">.+</")  #匹配><中任意的字符 
listNames=pattern1.findall(s) #獲取所有滿足正則表達式pattern1的字符串的列表 
listContents=pattern2.findall(s) #獲取所有滿足正則表達式pattern2的字符串的列表 
#由于xml是規(guī)范的,所以是一一對應(yīng)(對于錯誤輸入,暫時不考慮) 
for i in range(len(listNames)): 
  #輸出的時候利用切片丟棄多余的符號,如:<>/ 
  print(listNames[i][1:len(listNames[i])-1],":", 
     listContents[i][1:len(listContents[i])-2]) 

這個代碼運行后結(jié)果是可以的。

下面我們修改下s的格式:

#coding:utf-8
import re

s="<composer>Wolfgang Amadeus Mozart</composer> <author>Samuel Beckett</author> <city>London</city>"
pattern1=re.compile("<\w+>")  #匹配<>中任意的字符
# 此模式為非貪婪模式,所以s不是多行也可以匹配
pattern2=re.compile(">.+</")  #匹配><中任意的字符,問號必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達式pattern2的字符串的列表

#由于xml是規(guī)范的,所以是一一對應(yīng)(對于錯誤輸入,暫時不考慮)
for i in range(len(listNames)):
  #輸出的時候利用切片丟棄多余的符號,如:<>/
  print(listNames[i][1:len(listNames[i])-1],":",
     listContents[i][1:len(listContents[i])-2])

得到的答案如下所示:

我們打印一下匹配到的兩個結(jié)果看一下,修改代碼如下:

#coding:utf-8
import re

s="<composer>Wolfgang Amadeus Mozart</composer> <author>Samuel Beckett</author> <city>London</city>"
pattern1=re.compile("<\w+>")  #匹配<>中任意的字符
# 此模式為非貪婪模式,所以s不是多行也可以匹配
pattern2=re.compile(">.+</")  #匹配><中任意的字符,問號必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達式pattern2的字符串的列表

print(listNames)
print(listContents)

#由于xml是規(guī)范的,所以是一一對應(yīng)(對于錯誤輸入,暫時不考慮)
for i in range(len(listNames)):
  #輸出的時候利用切片丟棄多余的符號,如:<>/
  print(listNames[i][1:len(listNames[i])-1],":",
     listContents[i][1:len(listContents[i])-2])


顯示結(jié)果如下:

從第一個箭頭顯示可以看出,這個處理是對的,那么看第二個箭頭,這個匹配的結(jié)果顯然是不對的了,那么是什么原因呢?
這是因為在正則中,‘*'、‘+'、‘?'這些是貪婪匹配,如用 a*,操作結(jié)果是盡可能多地匹配模式。所以當(dāng)你試著匹配一對對稱的定界符,如 HTML 標(biāo)志中的尖括號。匹配單個 HTML 標(biāo)志的模式不能正常工作,因為 .* 的本質(zhì)是“貪婪”的 。在這種情況下,解決方案是使用不貪婪的限定符 *?、+?、?? 或 {m,n}?,盡可能匹配小的文本。

那么代碼可以修改如下:

#coding:utf-8
import re

s="<composer>Wolfgang Amadeus Mozart</composer> <author>Samuel Beckett</author> <city>London</city>"
pattern1=re.compile("<\w+?>")  #匹配<>中任意的字符
# 此模式為非貪婪模式,所以s不是多行也可以匹配
pattern2=re.compile(">.+?</")  #匹配><中任意的字符,問號必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達式pattern2的字符串的列表

#由于xml是規(guī)范的,所以是一一對應(yīng)(對于錯誤輸入,暫時不考慮)
for i in range(len(listNames)):
  #輸出的時候利用切片丟棄多余的符號,如:<>/
  print(listNames[i][1:len(listNames[i])-1],":",
     listContents[i][1:len(listContents[i])-2])

最后,用分組對代碼的正則進行優(yōu)化一下,如下:

#coding:utf-8
import re

s="<composer>Wolfgang Amadeus Mozart</composer><author>Samuel Beckett</author><city>London</city>"
pattern1=re.compile("<(\w+?)>")  #匹配<>中任意的字符
# 此模式為非貪婪模式,所以s不是多行也可以匹配
pattern2=re.compile("<\w+?>(.+?)</\w+?>")  #匹配<a>...</a>中任意的字符,問號必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達式pattern2的字符串的列表

#由于xml是規(guī)范的,所以是一一對應(yīng)(對于錯誤輸入,暫時不考慮)
for i in range(len(listNames)):
  print(listNames[i],":",
     listContents[i])


這篇文章就介紹到這,大家可以多參考腳本之家以前發(fā)布的關(guān)于python 正則表達式的相關(guān)內(nèi)容。

相關(guān)文章

  • Python機器學(xué)習(xí)之使用Pyecharts制作可視化大屏

    Python機器學(xué)習(xí)之使用Pyecharts制作可視化大屏

    pyecharts是一個用于生成Echarts圖表的Python庫,Echarts是百度開源的一個數(shù)據(jù)可視化 JS 庫,可以生成一些非常酷炫的圖表,這篇文章主要給大家介紹了關(guān)于Python機器學(xué)習(xí)之Pyecharts制作可視化大屏的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 基于python goto的正確用法說明

    基于python goto的正確用法說明

    這篇文章主要介紹了基于python goto的正確用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 基于Python實現(xiàn)層次性數(shù)據(jù)和閉包性質(zhì)

    基于Python實現(xiàn)層次性數(shù)據(jù)和閉包性質(zhì)

    這篇文章主要介紹了如何利用Python實現(xiàn)層次性數(shù)據(jù)和閉包性質(zhì),文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定幫助,需要的可以了解一下
    2022-05-05
  • 啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例

    今天小編就為大家分享一篇關(guān)于啥是佩奇?使用Python自動繪畫小豬佩奇的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python 使用pandas實現(xiàn)查詢和統(tǒng)計示例詳解

    Python 使用pandas實現(xiàn)查詢和統(tǒng)計示例詳解

    這篇文章主要為大家介紹了Python 使用pandas實現(xiàn)查詢和統(tǒng)計示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Python常用模塊logging——日志輸出功能(示例代碼)

    Python常用模塊logging——日志輸出功能(示例代碼)

    logging模塊是Python的內(nèi)置模塊,主要用于輸出運行日志,可以靈活配置輸出日志的各項信息。這篇文章主要介紹了Python常用模塊logging——日志輸出的實例代碼,需要的朋友可以參考下
    2019-11-11
  • GPU排隊腳本實現(xiàn)空閑觸發(fā)python腳本實現(xiàn)示例

    GPU排隊腳本實現(xiàn)空閑觸發(fā)python腳本實現(xiàn)示例

    有的服務(wù)器是多用戶使用,GPU的資源常常被占據(jù)著,很可能在夜間GPU空閑了,但來不及運行自己的腳本。如果沒有和別人共享服務(wù)器的話,自己的多個程序想排隊使用GPU,也可以用這個腳本
    2021-11-11
  • Python?中的異步?for?循環(huán)示例詳解

    Python?中的異步?for?循環(huán)示例詳解

    這篇文章主要介紹了Python中的異步for循環(huán),我們將討論 Python 庫 asyncio 和運行異步代碼所需的函數(shù),需要的朋友可以參考下
    2023-05-05
  • Python 棧實現(xiàn)的幾種方式及優(yōu)劣詳解

    Python 棧實現(xiàn)的幾種方式及優(yōu)劣詳解

    這篇文章主要為大家介紹了Python 棧實現(xiàn)的幾種方式及優(yōu)劣詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • selenium?UI自動化實戰(zhàn)過程記錄

    selenium?UI自動化實戰(zhàn)過程記錄

    如果大家有做過web的自動化測試,相信對于selenium一定不陌生,測試人員經(jīng)常使用它來進行自動化測試,下面這篇文章主要給大家介紹了關(guān)于selenium?UI自動化實戰(zhàn)的相關(guān)資料,需要的朋友可以參考下
    2021-12-12

最新評論