【问题标题】:Python regular expressions matching within set集合内匹配的 Python 正则表达式
【发布时间】:2011-08-15 10:41:24
【问题描述】:

http://gskinner.com/RegExr/(在线正则表达式测试器)上进行测试时,当存在 jpg 或 bmp 时,正则表达式 [jpg|bmp] 返回结果,但是,当我在 python 中运行此正则表达式时,它只返回 j 或 b。如何让正则表达式在集合中使用整个单词“jpg”或“bmp”?之前可能有人问过这个问题,但是我不确定如何构造问题来找到答案。谢谢!!!

如果有帮助,这里是整个正则表达式

"http://www\S*(?i)\\.(jpg|bmp|png|gif|img|jng|jpeg|jpe|gif|giff)"

它基本上只是在一个url中寻找图片

【问题讨论】:

    标签: python regex


    【解决方案1】:

    使用(jpg|bmp) 代替方括号。

    方括号的意思是——匹配方括号中的一个字符。

    编辑 - 你可能想要这样的东西:[^ ].*?(jpg|bmp)[^ ].*?\.(jpg|bmp)

    【讨论】:

    • 试过了,现在只返回文件扩展名,而不是url的第一部分
    • 那你应该改写你的问题。
    • 我尝试了你的建议,仍然只返回 jpg,忘记了前面的匹配字符
    • 你试过用括号括起来吗?
    【解决方案2】:

    当您使用[] 时,您正在创建一个包含括号之间的所有字符的字符类。

    所以您不匹配 jpgbmp 您匹配的是 jpg| ...

    您应该在正则表达式的字符串末尾添加一个锚点

    http://www\S*(?i)\\.(jpg|bmp|png|gif|img|jng|jpeg|jpe|gif|giff)$
              ^      ^^
    

    如果你需要双重转义,那么你的模式中的每个地方

    http://www\\S*(?i)\\.(jpg|bmp|png|gif|img|jng|jpeg|jpe|gif|giff)$
    

    确保它检查以字符串结尾结尾的文件。

    【讨论】:

      【解决方案3】:

      如果您正在搜索 URL 列表

      urls = [ 'http://some.link.com/path/to/file.jpg',
               'http://some.link.com/path/to/another.png',
               'http://and.another.place.com/path/to/not-image.txt',
             ]
      

      要查找与给定模式匹配的模式,您可以使用:

      import re
      for url in urls:
         if re.match(r'http://.*(jpg|png|gif)$'):
            print url
      

      哪个会输出

      http://some.link.com/path/to/file.jpg
      http://some.link.com/path/to/another.png
      

      re.match() 将在字符串开头测试匹配,并为前两个链接返回一个匹配对象,为第三个链接返回None

      如果您只是获得扩展,则可以使用以下内容:

      for url in urls:
         m = re.match(r'http://.*(jpg|png|gif)$')
         print m.group(0)
      

      将打印出来

      ('jpg',)
      ('png',)
      

      您将只获得扩展名,因为这是定义为一个组的内容。

      如果需要在一长串文本中查找url(如从wget返回),则需要使用re.search(),并将感兴趣的部分用( )括起来。例如,

      response = """dlkjkd dkjfadlfjkd fkdfl kadfjlkadfald ljkdskdfkl adfdf
          kjakldjflkhttp://some.url.com/path/to/file.jpgkaksdj fkdjakjflakdjfad;kadj af
          kdlfjd dkkf aldfkaklfakldfkja df"""
      
      reg = re.search(r'(http:.*/(.*\.(jpg|png|gif)))', response)
      
      print reg.groups()
      

      将打印

      ('http://some.url.com/path/to/file.jpg', 'file.jpg', 'jpg',)
      

      或者您可以使用re.findallre.finditer 代替re.search 来获取长响应中的所有URL。搜索只会返回第一个。

      【讨论】:

      • 您在任何地方都缺少“匹配”的第二个参数。
      猜你喜欢
      • 1970-01-01
      • 2012-04-23
      • 2016-07-01
      • 2013-09-22
      • 1970-01-01
      • 2023-04-03
      • 2022-12-11
      • 2015-09-14
      • 2021-12-31
      相关资源
      最近更新 更多