Python re.sub 替换 html 属性



我正在尝试从html代码调整图像大小。这是一个例子:

我的目标是用高度和宽度 400 替换 " height="108" " 和 " width="150"。我尝试了以下行,尽管它们似乎不起作用:

re.sub(r'width="[0-9]{2,4}"','width="400"',x)
re.sub(r'height="[0-9]{2,4}"','height="400"',x)

有人对此有解决方案吗?Ps:我不太擅长正则表达式... :)

它不起作用的原因是字符串是不可变的,并且您不处理结果。您可以通过以下方式">解决"问题:

x = re.sub(r'width="[0-9]{2,4}"','width="400"',x)
x = re.sub(r'height="[0-9]{2,4}"','height="400"',x)

话虽如此,使用正则表达式处理 HTML/XML 是一个非常糟糕的主意。假设您有一个标签<foo altwidth="1234">。现在,您将它更改为<foo altwidth="400">您想要吗?应该不会。

例如,您可以使用BeautifulSoup

soup = BeautifulSoup(x,'lxml')
for tag in soup.findAll(attrs={"width":True})
    tag.width = 400
for tag in soup.findAll(attrs={"height":True})
    tag.height = 400
x = str(soup)

在这里,我们将所有带有 width 属性的标签替换为 width="400",将所有标签替换为带有 height="400"height。例如,您可以通过仅接受<img>标签来使其更高级,例如:

soup = BeautifulSoup(x,'lxml')
for tag in soup.findAll('img',attrs={"width":True})
    tag.width = 400
for tag in soup.findAll('img',attrs={"height":True})
    tag.height = 400
x = str(soup)

似乎工作正常:

>>> x = '<foo width="150" height="108">'
>>> import re
>>> y = re.sub(r'width="[0-9]{2,4}"','width="400"',x)
>>> y
'<foo width="400" height="108">'

请注意,re.sub不会改变 x:

>>> x
'<foo width="150" height="108">'
>>> y
'<foo width="400" height="108">'

也许您想改为这样做:

x = re.sub(r'width="[0-9]{2,4}"','width="400"',x)
x = re.sub(r'height="[0-9]{2,4}"','height="400"',x)

最新更新