匹配模式返回字符串元组而不是匹配整体

时间:2015-05-27 16:53:02

标签: python regex

我有一个正则表达式来获取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')]

我不想得到一个元组,我希望将比赛整体表示出来。每个列表元素中只有一个完整的链接。如何避免因正则表达式匹配而获得元组?

1 个答案:

答案 0 :(得分:1)

我假设您正在从某个网页上获取图像。

以下是使用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))来获取所有图像名称(当然只是一个例子)。 I.E. nexus2cee_gamethumb_thumb1.png

更新代码

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