Python re.sub替换html属性

时间:2017-03-16 15:03:01

标签: python html regex

我正在尝试从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:我对Regex不太好......:)

2 个答案:

答案 0 :(得分:4)

它不起作用的原因是因为字符串是不可变的,并且您不处理结果。你可以" 解决"问题:

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 height="400"。您可以通过例如仅接受<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)

答案 1 :(得分:2)

似乎工作正常:

re.sub

请注意,>>> x '<foo width="150" height="108">' >>> y '<foo width="400" height="108">' 不会改变x:

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

也许你想这样做:

use HTTP::Request::Common qw( POST );
use JSON::XS              qw( encode_json );
use URI                   qw( );

my $message_data = encode_json(...);

my $url = URI->new('https://graph.facebook.com/v2.6/me/messages');
$url->query_form( access_token => PAGE_ACCESS_TOKEN );

my $req = POST($url,
   Content_Type => 'application/json',
   Content      => $message_data,
);