正则表达式使用python解析URL的一部分

时间:2016-08-30 02:29:00

标签: python regex python-2.7 python-3.x regex-negation

我的数据如下,

data['url']
http://hostname.com/aaa/uploads/2013/11/a-b-c-d.jpg https://www.aaa.com/
http://hostname.com/bbb/uploads/2013/11/e-f-g-h.gif https://www.aaa.com/
http://hostname.com/ccc/uploads/2013/11/e-f-g-h.png http://hostname.com/ccc/uploads/2013/11/a-a-a-a.html 
http://hostname.com/ddd/uploads/2013/11/w-e-r-t.ico
http://hostname.com/ddd/uploads/2013/11/r-t-y-u.aspx https://www.aaa.com/
http://hostname.com/bbb/uploads/2013/11/t-r-w-q.jpeg https://www.aaa.com/

我想找出.jpg,.gif,.png,.ico,.aspx,.html,.jpeg等格式并向后解析,直到找到" /" 。另外,我想通过字符串检查几个出现的情况。我的输出应该是,

data['parsed']
a-b-c-d
e-f-g-h
e-f-g-h a-a-a-a
w-e-r-t
r-t-y-u
t-r-w-q

我在想的不是为每种格式编写单独的命令,有没有办法在一个命令下编写所有内容。

有人可以帮我写这些命令吗?我是regex的新手,任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:1)

这会构建一个扩展名对的名称列表

import re
results = []
for link in data:
    matches = re.search(r'/(\w-\w-\w-\w)\.(\w{2,})\b', link)
    results.append((matches.group(1), matches.group(2)))

答案 1 :(得分:1)

此模式返回文件名。我刚刚使用了您的一个网址来演示,更多信息,您只需将匹配项附加到结果列表中即可:

import re
url = "http://hostname.com/ccc/uploads/2013/11/e-f-g-h.png http://hostname.com/ccc/uploads/2013/11/a-a-a-a.html" 

p = r'((?:[a-z]-){3}[a-z]).'
matches = re.findall(p, url)

>>> print('\n'.join(matches))
e-f-g-h
a-a-a-a

假设网址都具有您提供的一般形式。

答案 2 :(得分:0)

你可以试试这个:

data['parse'] = re.findall(r'[^/]+\.[a-z]+ ',data['url'])

这将选择带有扩展名的所有文件名。如果你想删除扩展名,上面的代码会返回一个列表,然后你可以用list comprehension和re.sub来处理它,如下所示:

[re.sub('\.[a-z]+$','',exp) for exp in data['parse']]

使用.join函数创建一个字符串,如Totem的回答

所示