python re sub 与 findall

suz*_*zee 2 python regex

我的代码:

import urllib
import re
xml = urllib.urlopen('url').read()
Run Code Online (Sandbox Code Playgroud)

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

例如:

re.findall(r'<fig(.*?)</fig>', xml, re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

返回匹配项且非空。

然而,

re.sub(r'<fig(.*?)</fig>', ' ', xml, re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

不执行任何操作,xml 字符串未更改。我很困惑为什么,请帮忙。

fal*_*tru 6

的第四个参数re.sub不是 a flags,而是 a counts。的值为re.DOTALL16(至少在 Python 2.7 / 3.4 中)。所以re.sub(.., re.DOTALL)只会更换16次。

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

re.sub(r'<fig(.*?)</fig>', ' ', xml, flags=re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

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