Matched模式返回字符串的元组,而不是作为Wh的匹配

2024-09-24 22:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个正则表达式来获取HTML文档中的一些链接。你知道吗

((http://)(|up)(\.example\.com))*(/uploads/pp2p|/sites/default/files/[-_a-zA-Z0-9%/]+)\.(jpg|jpeg|gif|png)

我打算匹配的是,如果http部分存在,如果不存在,就匹配它。如果up部分存在,如果不存在,就匹配它。如果example.com存在,如果不存在,就匹配它,不匹配。关于/uploads/pp2p和另一个,如果不存在,就匹配它。最后,如果它有以下图像格式之一,如果不存在,就匹配它,不匹配。我希望得到一个链接列表,如

links = ['http://up.example.com/uploads/pp2p/www.jpg', '/sites/default/files/.png', 'http://example.com/uploads/zzz.jpg']

链接中的元素继续被不同的组合填充。不管怎样,我得到的结果就像一个元组

[('', '', '', '', '/sites/default/files/favicon', 'png'), ('', '', '', '', '/sites/default/files/logo_2', 'png')]

我不想得到一个元组,我想把匹配作为一个整体来表示。每个列表元素中只有一个完整的链接。如何避免由于正则表达式匹配而得到元组?你知道吗


Tags: comhttpdefault元素列表png链接example
1条回答
网友
1楼 · 发布于 2024-09-24 22:18:16

我假设你在某个地方从网页上获取图像。你知道吗

下面是使用lxml.html获取所有图像src链接的快速方法:

from lxml.html import parse
import re

doc = parse('http://www.androidpolice.com').getroot()
links = []
img_list = []

for img in doc.cssselect('img'):
    links.append(img.get('src'))

for link in links:
    match = re.search(".*androidpolice\.com.*",link)
    if match:
        img_list.append(match.group(0))

for img in img_list:
    print(img)

给出输出:

http://www.androidpolice.com/wp-content/themes/ap2/ap_resize/ap_resize.php?src=http%3A%2F%2Fwww.androidpolice.com%2Fwp-content%2Fuploads%2F2015%2F05%2Fnexus2cee_gamethumb_thumb1.png&h=128&zc=3
http://www.androidpolice.com/wp-content/themes/ap2/ap_resize/ap_resize.php?src=http%3A%2F%2Fwww.androidpolice.com%2Fwp-content%2Fuploads%2F2015%2F05%2Fnexus2cee_gamethumb_thumb1.png&w=150&h=75&f=8|8|8|8|8|8|8|8|8|8|8|8|8
http://www.androidpolice.com/wp-content/themes/ap2/ap_resize/ap_resize.php?src=http%3A%2F%2Fwww.androidpolice.com%2Fwp-content%2Fuploads%2F2014%2F06%2Fnexusae0_Google-Photos-icon-logo-150x150.png&h=128&zc=3

-[输出截断]-

然后您可以执行(?:%2F)([\w-]+\.(?:png|jpg))来获取所有的图像名称(当然只是一个示例)。即nexus2cee_gamethumb_thumb1.png

更新代码

更改为只搜索每个链接中的androidpolice.com。您可以在6.2. re — Regular expression operations找到有关使用re模块的更多信息。你知道吗

相关问题 更多 >