python re sub vs findall

时间:2014-10-17 15:20:42

标签: python regex

我的代码:

import urllib
import re
xml = urllib.urlopen('url').read()

我有兴趣从xml文件中删除某些标签及其内容,因此,我尝试使用正则表达式。

例如:

re.findall(r'<fig(.*?)</fig>', xml, re.DOTALL)

返回匹配项并且非空。

然而,

re.sub(r'<fig(.*?)</fig>', ' ', xml, re.DOTALL)

什么都不做,xml字符串不变。我很困惑为什么,请帮忙。

2 个答案:

答案 0 :(得分:3)

re.sub的第4个参数不是flags,而是countsre.DOTALL的值为16(至少在Python 2.7 / 3.4中)。因此re.sub(.., re.DOTALL)只会替换16次。

flags指定为关键字参数可以解决您的问题:

re.sub(r'<fig(.*?)</fig>', ' ', xml, flags=re.DOTALL)

除此之外,re.sub返回替换的字符串,而不是就地更改第三个参数。确保您已分配回函数的返回值。

答案 1 :(得分:0)

由于字符串在python中是不可变的,因此您必须将re.sub的结果分配给新变量。如果您不将其分配给新变量,则无法获得所需的输出。