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

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

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

下面從一個(gè)例子入手:

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

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

希望自動(dòng)格式化重寫為:

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

一個(gè)代碼是這樣的形式:

#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) #獲取所有滿足正則表達(dá)式pattern1的字符串的列表 
listContents=pattern2.findall(s) #獲取所有滿足正則表達(dá)式pattern2的字符串的列表 
#由于xml是規(guī)范的,所以是一一對(duì)應(yīng)(對(duì)于錯(cuò)誤輸入,暫時(shí)不考慮) 
for i in range(len(listNames)): 
  #輸出的時(shí)候利用切片丟棄多余的符號(hào),如:<>/ 
  print(listNames[i][1:len(listNames[i])-1],":", 
     listContents[i][1:len(listContents[i])-2]) 

這個(gè)代碼運(yùn)行后結(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(">.+</")  #匹配><中任意的字符,問號(hào)必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達(dá)式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達(dá)式pattern2的字符串的列表

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

得到的答案如下所示:

我們打印一下匹配到的兩個(gè)結(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(">.+</")  #匹配><中任意的字符,問號(hào)必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達(dá)式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達(dá)式pattern2的字符串的列表

print(listNames)
print(listContents)

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


顯示結(jié)果如下:

從第一個(gè)箭頭顯示可以看出,這個(gè)處理是對(duì)的,那么看第二個(gè)箭頭,這個(gè)匹配的結(jié)果顯然是不對(duì)的了,那么是什么原因呢?
這是因?yàn)樵谡齽t中,‘*'、‘+'、‘?'這些是貪婪匹配,如用 a*,操作結(jié)果是盡可能多地匹配模式。所以當(dāng)你試著匹配一對(duì)對(duì)稱的定界符,如 HTML 標(biāo)志中的尖括號(hào)。匹配單個(gè) HTML 標(biāo)志的模式不能正常工作,因?yàn)?.* 的本質(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(">.+?</")  #匹配><中任意的字符,問號(hào)必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達(dá)式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達(dá)式pattern2的字符串的列表

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

最后,用分組對(duì)代碼的正則進(jìn)行優(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>中任意的字符,問號(hào)必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達(dá)式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達(dá)式pattern2的字符串的列表

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


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

相關(guān)文章

  • Tensorflow深度學(xué)習(xí)使用CNN分類英文文本

    Tensorflow深度學(xué)習(xí)使用CNN分類英文文本

    這篇文章主要為大家介紹了Tensorflow深度學(xué)習(xí)CNN實(shí)現(xiàn)英文文本分類示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python如何生成隨機(jī)高斯模糊圖片詳解

    Python如何生成隨機(jī)高斯模糊圖片詳解

    這篇文章主要給大家介紹了關(guān)于高斯模糊的原理以及python實(shí)現(xiàn)的相關(guān)資料,Python使用opencv庫(kù)生成模糊圖像還是很方便的,需要的朋友可以參考下
    2021-05-05
  • Python多線程多進(jìn)程實(shí)例對(duì)比解析

    Python多線程多進(jìn)程實(shí)例對(duì)比解析

    這篇文章主要介紹了Python多線程多進(jìn)程實(shí)例對(duì)比解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 利用Anaconda完美解決Python 2與python 3的共存問題

    利用Anaconda完美解決Python 2與python 3的共存問題

    Anaconda 是 Python 的一個(gè)發(fā)行版,如果把 Python 比作 Linux,那么 Anancoda 就是 CentOS 或者 Ubuntu,下面這篇文章主要給大家介紹了利用Anaconda完美解決Python 2與python 3共存問題的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒。
    2017-05-05
  • Python解決“ImportError:?Couldn‘t?import?Django”問題全攻略

    Python解決“ImportError:?Couldn‘t?import?Django”問題全攻略

    本文主要介紹了Python解決“ImportError:?Couldn‘t?import?Django”問題全攻略,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Python中用pycurl監(jiān)控http響應(yīng)時(shí)間腳本分享

    Python中用pycurl監(jiān)控http響應(yīng)時(shí)間腳本分享

    這篇文章主要介紹了Python中用pycurl監(jiān)控http響應(yīng)時(shí)間腳本分享,本文腳本實(shí)現(xiàn)監(jiān)控http相應(yīng)碼,響應(yīng)大小,建立連接時(shí)間,準(zhǔn)備傳輸時(shí)間,傳輸?shù)谝粋€(gè)字節(jié)時(shí)間,完成時(shí)間,需要的朋友可以參考下
    2015-02-02
  • Python實(shí)現(xiàn)在數(shù)字中添加千位分隔符的方法小結(jié)

    Python實(shí)現(xiàn)在數(shù)字中添加千位分隔符的方法小結(jié)

    在數(shù)據(jù)處理和數(shù)據(jù)可視化中,經(jīng)常需要對(duì)大數(shù)值進(jìn)行格式化,其中一種常見的需求是在數(shù)字中添加千位分隔符,本文為大家整理了三種常見方法,希望對(duì)大家有所幫助
    2024-01-01
  • python實(shí)現(xiàn)跨年表白神器--你值得擁有

    python實(shí)現(xiàn)跨年表白神器--你值得擁有

    這篇文章主要介紹了python實(shí)現(xiàn)跨年表白神器的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-01-01
  • pytest中配置文件pytest.ini使用

    pytest中配置文件pytest.ini使用

    本文主要介紹了pytest中配置文件pytest.ini使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 淺談Python的元編程

    淺談Python的元編程

    提到元這個(gè)字,你也許會(huì)想到元數(shù)據(jù),元數(shù)據(jù)就是描述數(shù)據(jù)本身的數(shù)據(jù),元類就是類的類,本文的主要目的是向大家介紹這些元編程技術(shù),并且給出實(shí)例來演示它們是怎樣定制化源代碼的行為。剛興趣的朋友可以參考一下
    2021-09-09

最新評(píng)論

五河县| 北票市| 班戈县| 慈利县| 海城市| 定襄县| 佛教| 梅河口市| 阳春市| 米林县| 江达县| 原平市| 来安县| 襄垣县| 白沙| 东山县| 二连浩特市| 瓦房店市| 长阳| 景宁| 清远市| 苏尼特右旗| 永城市| 沈丘县| 瓦房店市| 舟曲县| 宣汉县| 利辛县| 吐鲁番市| 纳雍县| 舟山市| 尼勒克县| 河池市| 静安区| 江川县| 镇赉县| 南宁市| 文化| 禹州市| 吉林市| 福建省|