下面從一個例子入手:
利用正則表達式解析下面的XML/HTML標簽:
<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是規范的,所以是一一對應(對于錯誤輸入,暫時不考慮) for i in range(len(listNames)): #輸出的時候利用切片丟棄多余的符號,如:<>/ print(listNames[i][1:len(listNames[i])-1],":", listContents[i][1:len(listContents[i])-2]) 這個代碼運行后結果是可以的。
下面我們修改下s的格式:
#coding:utf-8import res="<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是規范的,所以是一一對應(對于錯誤輸入,暫時不考慮)for i in range(len(listNames)): #輸出的時候利用切片丟棄多余的符號,如:<>/ print(listNames[i][1:len(listNames[i])-1],":", listContents[i][1:len(listContents[i])-2])得到的答案如下所示:

我們打印一下匹配到的兩個結果看一下,修改代碼如下:
#coding:utf-8import res="<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是規范的,所以是一一對應(對于錯誤輸入,暫時不考慮)for i in range(len(listNames)): #輸出的時候利用切片丟棄多余的符號,如:<>/ print(listNames[i][1:len(listNames[i])-1],":", listContents[i][1:len(listContents[i])-2])
新聞熱點
疑難解答