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

时间:2016-08-30 17:21:00

标签: python regex regex-negation

我有以下数据,

data
http://hsotname.com/2016/08/a-b-n-r-y-u
https://www.hostname.com/best-food-for-humans
http://www.hostname.com/wp-content/uploads/2014/07/a-w-w-2.jpg
http://www.hostname.com/a/geniusbar/
http://www.hsotname.com/m/
http://www.hsotname.com/

我想避开第一个http://或https://并检查最后一个' /'并解析URL的其余部分。但这里的挑战是,我们有' /'在几个URL的末尾也是如此。我想要的输出是,

parsed
a-b-n-r-y-u
best-food-for-humans
a-w-w-2.jpg
NULL
NULL 
NULL

有人可以帮我找到最后一个/并解析URL的剩余部分吗?我是regex的新手,任何帮助都会受到赞赏。

由于

6 个答案:

答案 0 :(得分:2)

另一种选择是简单地拆分“/”并取最后一个元素:

"http://hsotname.com/2016/08/a-b-n-r-y-u".split("/")[-1]
# 'a-b-n-r-y-u'

"http://www.hostname.com/a/geniusbar/".split("/")[-1]
# ''

答案 1 :(得分:1)

正则表达式可能不是您应该这样做的方式 - 考虑到您标记了问题python,请尝试(假设网址名称为url):

last-part = url.split('/')[-1]

这会将URL拆分为斜杠之间的子串列表,并将最后一个存储在last-part中。

如果你坚持使用正则表达式,那么匹配字符串的末尾在这里是有用的。尝试/[^/]*$,它与斜杠匹配,后跟任意数量的非斜杠,后跟字符串的结尾。

如果您想要匹配斜杠后面的最后一个非空部分(如果您不希望最后三个示例返回""),则可以执行/[^/]*/?$,这允许但最后不需要一个斜杠。

答案 2 :(得分:0)

我会选择这样的事情:

\/([^/]*)$

它会匹配最后一个斜线,然后抓住任何不是斜线的东西(如果有的话)。

答案 3 :(得分:0)

在这种情况下,正则表达式不是最好的工具。只需使用str.rfind:

[url[url.rfind('/'):] for url in data]

会给你你想要的东西

答案 4 :(得分:0)

可能过度杀死该示例,但是如果您需要处理位置片段/只是位置名称(即,最后的正斜杠是http等的一部分...(分裂http://hostname.com并采取最后一个/会向您hostname.com - urlsplit提供''的路径,然后您可能会更安全地使用:

>>> from urllib.parse import urlsplit
>>> urls = ['http://hsotname.com/2016/08/a-b-n-r-y-u', 'https://www.hostname.com/best-food-for-humans', 'http://www.hostname.com/wp-content/uploads/2014/07/a-w-w-2.jpg', 'http://www.hostname.com/a/geniusbar/', 'http://www.hsotname.com/m/', 'http://www.hsotname.com/']
>>> [urlsplit(url).path.rpartition('/')[2] for url in urls]
['a-b-n-r-y-u', 'best-food-for-humans', 'a-w-w-2.jpg', '', '', '']

答案 5 :(得分:0)

从网址末尾检查,并匹配/

以外的所有内容
[^/]+?$

\b[^/]+?\b$