我的代码:
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字符串不变。我很困惑为什么,请帮忙。
答案 0 :(得分:3)
re.sub
的第4个参数不是flags
,而是counts
。 re.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的结果分配给新变量。如果您不将其分配给新变量,则无法获得所需的输出。