在最后一个正斜杠之前删除部分字符串

Posted

技术标签:

【中文标题】在最后一个正斜杠之前删除部分字符串【英文标题】:Remove Part of String Before the Last Forward Slash 【发布时间】:2015-06-21 20:04:26 【问题描述】:

我目前正在开发的程序从网站检索 URL 并将它们放入列表中。我想得到的是 URL 的最后一部分。

因此,如果我的 URL 列表中的第一个元素是 "https://docs.python.org/3.4/tutorial/interpreter.html",我想删除 "interpreter.html" 之前的所有内容。

我可以使用函数、库或正则表达式来实现这一点吗?我查看了其他 Stack Overflow 帖子,但解决方案似乎不起作用。

这是我的几次尝试中的两次:

for link in link_list:
   file_names.append(link.replace('/[^/]*$',''))
print(file_names)

&

for link in link_list:
   file_names.append(link.rpartition('//')[-1])
print(file_names)

【问题讨论】:

你怎么知道他们没有工作?您收到错误消息了吗? @Kevin 输出不正确。 为什么你的rpartition() 尝试用反斜杠而不是正斜杠分割? @TigerhawkT3 对不起。刚刚修好了 现在它在一对正斜杠上而不是一个斜杠上拆分(正斜杠不需要转义)。 【参考方案1】:

看看str.rsplit

>>> s = 'https://docs.python.org/3.4/tutorial/interpreter.html'
>>> s.rsplit('/',1)
['https://docs.python.org/3.4/tutorial', 'interpreter.html']
>>> s.rsplit('/',1)[1]
'interpreter.html'

并使用正则表达式

>>> re.search(r'(.*)/(.*)',s).group(2)
'interpreter.html'

然后匹配位于最后一个/ 和字符串结尾之间的第二组。这是 RegEx 中贪心技术的一种贪婪用法。

Debuggex Demo

小提示 - 代码中link.rpartition('//')[-1] 的问题在于您尝试匹配// 而不是/。所以删除多余的/,就像link.rpartition('/')[-1]一样。

【讨论】:

【参考方案2】:

这不需要正则表达式。

import os

for link in link_list:
    file_names.append(os.path.basename(link))

【讨论】:

是的,这也很快。这是解析这些类型的字符串的更强大的方法,imo【参考方案3】:

只需使用 string.split:

url = "/some/url/with/a/file.html"

print url.split("/")[-1]

# Result should be "file.html"

split 为您提供一个由“/”分隔的字符串数组。 [-1] 为您提供数组中的最后一个元素,这就是您想要的。

【讨论】:

【参考方案4】:

如果您打算使用正则表达式,这应该可以工作

 for link in link_list:
    file_names.append(link.replace('.*/',''))
 print(file_names)

【讨论】:

【参考方案5】:

你可以使用rpartition():

>>> s = 'https://docs.python.org/3.4/tutorial/interpreter.html'
>>> s.rpartition('/')
('https://docs.python.org/3.4/tutorial', '/', 'interpreter.html')

并取返回的 3 元素元组的最后一部分:

>>> s.rpartition('/')[2]
'interpreter.html'

【讨论】:

可能是因为如果字符串使用反斜杠作为文件结构分隔符,/ 上的拆分将不起作用......但这对于 URL 来说不是问题,所以我不确定。 这太棒了!【参考方案6】:

这是一种更通用的正则表达式方式:

    re.sub(r'^.+/([^/]+)$', r'\1', "http://test.org/3/files/interpreter.html")
    'interpreter.html'

【讨论】:

以上是关于在最后一个正斜杠之前删除部分字符串的主要内容,如果未能解决你的问题,请参考以下文章

删除网址中第一个正斜杠之前的所有内容[重复]

使用用户提交的内容重新填充 textarea(使用 ASCII 代码并且在某些字符之前没有附加的正斜杠)

python如何去掉字符串中的斜杠

在 presto 中使用正则表达式仅在最后一个斜杠前面有一个字符时才删除它

通过正斜杠或什么都不拆分字符串

使用正则表达式替换仅保留正斜杠和数字