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