首页 > 编程 > Python > 正文

python正则中最短匹配实现代码

2020-02-22 22:53:07
字体:
来源:转载
供稿:网友

下面从一个例子入手:

利用正则表达式解析下面的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])            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表