我的代码:
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 字符串未更改。我很困惑为什么,请帮忙。
最佳答案
re.sub
的第四个参数不是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
返回替换的字符串,而不是就地更改第三个参数。确保您已分配回函数的返回值。
关于python re sub 与 findall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26428244/