如何在for循环中排除与文本模式匹配的项目?

时间:2019-04-01 14:45:10

标签: python

我正在将一些带有刮痕的图像拖入python列表中。有些图像是占位符,可以通过URL识别。因此,我想通过正则表达式检查特定字符串,如果匹配则跳过此图像。

  try:
      fh = open('.\screenshot.png', 'rw'):
      # Do something
  except FileNotFoundError:
      print("File not found")

不幸的是,这不起作用:

images = response.xpath('//meta[@property="og:image"]/@content').extract()[0:3]

>>> images
['https://www.example.com/image/8a/53/ba/WARas201B-BA0723.jpg']

image_urls = [x.re_first('^((?!Demo_600x600.*).)*$') for x in images]

如何将名称中带有Traceback (most recent call last): File "<console>", line 1, in <module> File "<console>", line 1, in <listcomp> AttributeError: 'str' object has no attribute 're_first' 的图像排除在最多只能进入“图像”列表的位置?

2 个答案:

答案 0 :(得分:0)

在这里尝试使用正则表达式似乎有点过分。

image_urls = [x for x in images if not 'Demo_600x600' in x]

如果您坚持使用正则表达式,请尝试

image_urls = [x for x in images if not re.search('Demo_600x600', x)]

答案 1 :(得分:0)

要回答这个问题,可以不使用正则表达式。

images = ["image1.png",
          "image2.png",
          "image3.png",
          "image_demo.png",
          "image4.png",
          "image_example.png",
          "image_demo.png"]

for image in images:
    if not "demo" in image:
        # do your thing here
        print (image)

这将返回:

image1.png
image2.png
image3.png
image4.png
image_example.png

如果您有要排除的事物列表,则可以执行以下操作。

excludes = ["demo", "example"]

for image in images:
    for exclude in excludes:
        if exclude in image:
            break
    else:
        # do your thing here
        print (image)

这将返回:

image1.png
image2.png
image3.png
image4.png