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

Regex to parse out a part of URL using python

我有如下数据,

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

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

有人可以帮我写这些命令吗?我是正则表达式的新手,如有任何帮助,我们将不胜感激。

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

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

此模式 returns 文件名。我刚刚使用了您的一个网址来进行演示,要了解更多信息,您可以简单地将匹配项附加到结果列表中:

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

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

你可以试试这个:

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

这将挑选出所有文件名及其扩展名。如果你想删除扩展名,returns 上面的代码是一个列表,然后你可以使用列表理解和 re.sub 处理它,如下所示:

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

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