最新国产好看的视频,伊人天堂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ī)范的,所以是一一對應(yīng)(對于錯(cuò)誤輸入,暫時(shí)不考慮) 
for i in range(len(listNames)): 
  #輸出的時(shí)候利用切片丟棄多余的符號,如:<>/ 
  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(">.+</")  #匹配><中任意的字符,問號必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達(dá)式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達(dá)式pattern2的字符串的列表

#由于xml是規(guī)范的,所以是一一對應(yīng)(對于錯(cuò)誤輸入,暫時(shí)不考慮)
for i in range(len(listNames)):
  #輸出的時(shí)候利用切片丟棄多余的符號,如:<>/
  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(">.+</")  #匹配><中任意的字符,問號必須加,"?"是非貪婪匹配
listNames=pattern1.findall(s) #獲取所有滿足正則表達(dá)式pattern1的字符串的列表
listContents=pattern2.findall(s) #獲取所有滿足正則表達(dá)式pattern2的字符串的列表

print(listNames)
print(listContents)

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


顯示結(jié)果如下:

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

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

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

#由于xml是規(guī)范的,所以是一一對應(yīng)(對于錯(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庫生成模糊圖像還是很方便的,需要的朋友可以參考下
    2021-05-05
  • Python多線程多進(jìn)程實(shí)例對比解析

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

    這篇文章主要介紹了Python多線程多進(jìn)程實(shí)例對比解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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)常需要對大數(shù)值進(jìn)行格式化,其中一種常見的需求是在數(shù)字中添加千位分隔符,本文為大家整理了三種常見方法,希望對大家有所幫助
    2024-01-01
  • python實(shí)現(xiàn)跨年表白神器--你值得擁有

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

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

    pytest中配置文件pytest.ini使用

    本文主要介紹了pytest中配置文件pytest.ini使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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

最新評論

武城县| 杭锦后旗| 安新县| 汕头市| 隆子县| 固安县| 阿尔山市| 新河县| 永嘉县| 朝阳县| 桐乡市| 岳阳市| 新乐市| 错那县| 石门县| 安达市| 祁东县| 泾源县| 铜陵市| 苍溪县| 拉萨市| 庄河市| 习水县| 梨树县| 安吉县| 襄垣县| 隆昌县| 甘肃省| 怀宁县| 广安市| 栖霞市| 琼海市| 来凤县| 连城县| 沽源县| 柳州市| 丽水市| 桓台县| 荥阳市| 如皋市| 绥江县|