在s中匹配的Python正则表达式

2024-05-21 14:42:45 发布

您现在位置:Python中文网/ 问答频道 /正文

http://gskinner.com/RegExr/(联机regex测试仪)上测试时,当jpg或bmp存在时,regex [jpg|bmp]返回结果,但是,当我在python中运行此regex时,它只返回j或b。如何使regex将整个单词“jpg”或“bmp”包含在集合中?这可能是以前问过的,但我不知道如何构造问题来找到答案。谢谢!!!

这是全部的正则表达式,如果有帮助的话

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

基本上就是在url中查找图片


Tags: 答案comhttpimgpngwww联机单词
3条回答

^{}代替方括号。

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

编辑-您可能需要这样的内容:^{}[^ ].*?\.(jpg|bmp)

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

所以你不匹配jpgbmp你匹配的是jpg|。。。

您应该在regex中为字符串的结尾添加一个锚

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

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

如果您正在搜索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',)

您将只得到扩展,因为这是一个组的定义。

如果您需要在一长串文本(例如从wget返回的)中找到url,则需要使用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。搜索将只返回第一个。

相关问题 更多 >