我想编写一个Python脚本,下载一个充满链接的数组的每张图片。
代码如下所示:
for url in array:
if 'jpg' in url or 'jpeg' in url or 'png' in url or 'gif' in url:
print url
正如您所看到的,if语句非常低效,我想简化它。如果可能的话,最好使用正则表达式。有人可以帮助我吗?
答案 0 :(得分:9)
正则表达式不是正确的工具,因为你不匹配模式,只是寻找子串。
相反,您应该使用any
和generator expression:
if any(x in url for x in ('jpg', 'jpeg', 'png', 'gif')):
作为奖励,此解决方案与您当前的解决方案一样懒惰(它只根据需要执行尽可能多的in
成员资格测试)
答案 1 :(得分:2)
虽然这不一样,但你打算做的更多:
for url in array:
if url.rsplit('.',1)[1] in ('jpg', 'jpeg', 'png', 'gif'):
print url
答案 2 :(得分:2)
您可能不需要正则表达式来执行此操作,但如果您仍然需要,请执行以下操作:
http://regex101.com/r/jH8fO4/3< - 请参阅正在执行的正则表达式。
^.*\.(jpeg|jpg|png|gif)$
您当然可以在表达式的末尾添加更多内容,以便处理请求或变量附加到网址的情况。
编辑 - 更新以符合文件名中多于1个点的可能性:
http://regex101.com/r/jH8fO4/4 ^[a-z0-9]*\.{1}(jpeg|jpg|png|gif)$
答案 3 :(得分:0)
使用正则表达式做同样的事情看起来像这样。
pattern = re.compile('jpg|jpeg|png|gif')
for url in array:
if pattern.search(url) is not None:
print url
答案 4 :(得分:0)
我会使用os.path.splitext:
import os
for url in array:
_, ext = os.path.splitext(url)
if ext in ('.jpg', '.jpeg', '.png', '.gif'):
print url