在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)"
它基本上只是在网址中查找图片
答案 0 :(得分:3)
答案 1 :(得分:3)
当您使用[]
时,您正在创建一个包含括号内所有字符的字符类。
因此,对于jpg
或bmp
或j
或{{1},您匹配p
或g
} ...
您应该将字符串末尾的锚点添加到正则表达式
|
如果您需要双重转义,那么您的模式中的每个位置
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.findall
或re.finditer
代替re.search
来获取长响应中的所有网址。搜索只会返回第一个。