我有以下数据,
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的新手,任何帮助都会受到赞赏。
由于
答案 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$