在集合中匹配的Python正则表达式

时间:2011-08-15 10:41:25

标签: python regex

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)"

它基本上只是在网址中查找图片

3 个答案:

答案 0 :(得分:3)

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

方括号表示 - 匹配方括号中集合的字符。

修改 - 您可能想要这样的内容:[^ ].*?(jpg|bmp)[^ ].*?\.(jpg|bmp)

答案 1 :(得分:3)

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

因此,对于jpgbmpj或{{1},您匹配pg } ...

您应该将字符串末尾的锚点添加到正则表达式

|

如果您需要双重转义,那么您的模式中的每个位置

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

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

答案 2 :(得分:0)

如果您要搜索网址列表

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',)

您将获得扩展,因为这是被定义为组的。

如果您需要在一长串文本中找到网址(例如从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来获取长响应中的所有网址。搜索只会返回第一个。