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

Regex to parse out a part of URL

我有以下数据,

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 的剩余部分?我是正则表达式的新手,如有任何帮助,我们将不胜感激。

谢谢

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

"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]
# ''

我会选择这样的东西:

\/([^/]*)$

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

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

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

会给你想要的东西

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

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

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

不过,如果您坚持使用正则表达式,那么在字符串末尾进行匹配会很有帮助。尝试 /[^/]*$,它匹配一个斜杠,后跟任意数量的非斜杠,然后是字符串的结尾。

如果你想匹配斜杠后面的最后一个非空部分(如果你不想最后三个例子 return ""),你可以做 /[^/]*/?$,允许但不需要在最后使用单斜线。

这个例子可能有点过头了,但是如果你需要处理位置 fragments/just 位置名称(即最后一个正斜杠是 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', '', '', '']

从 URL 的末尾开始检查,并匹配除 /

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

\b[^/]+?\b$