1. 苏葳的备忘录首页
  2. 编程

用Python的正则去除xml文件中的注释

python 正则表达式手头有一个xml配置文件,里面加了许多大块的注释,严重影响阅读。现在考虑一下,如何用Python中的正则表达式去除这个xml文件中的注释,也就是形如<!– 注释内容–>的这种注释代码块?Python的re模块中,dot(.)可用于代表任意字符,newline字符除外,而<!—和–>有可能在一行,也有可能含多行,所以需考虑这一点。re.sub及subn两个方法可用于替换掉匹配内容。让我们来试试:

rs=re.subn(r'<!--.*-->','',str,flags=re.DOTALL)

注意subn方法,最后一个参数flags=re.DOTALL,此int常量定义指明dot(.)符号不仅可指代任意字符,也可代替newline。为何要显式给参数flags赋值呢。。因为前面还省略了一个count参数。。

现在我们运行该语句,查看rs[0]的值,此值为替换后的str值。会发现得到的字符数比预计的要少。原来对于<!—fdfsdf–>afadfdf<!—agadfdfdf–>形式的字串,此正则匹配了最前面一个<!–和最后面一个–>,导致两个注释中间的afadfdf也被吃掉了。

python手册中给出了解决方案:在.*后加加个?,正则将使用最小匹配。即把语句改为:

rs=re.subn(r'<!--.*?-->','',str,flags=re.DOTALL)
print rs[0],rs[1]

则rs[0]会输出正确的结果,而rs[1]会指出完成了多少次替换。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/548.html

发表评论

邮箱地址不会被公开。 必填项已用*标注