正则表达式解析出 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$
我有以下数据,
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$