在最后一次前向斜杠之前删除部分字符串

时间:2015-04-15 17:55:20

标签: python regex string replace

我目前正在处理的程序从网站检索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)

6 个答案:

答案 0 :(得分:19)

看看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'

并使用RegEx

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

然后匹配位于最后/和String结尾之间的第二组。这是RegEx中贪婪技术的贪婪用法。

Regular expression visualization

Debuggex Demo

小笔记 - 代码中link.rpartition('//')[-1]的问题在于您尝试匹配//而不是/。因此请删除/中的额外link.rpartition('/')[-1]

答案 1 :(得分:6)

这不需要正则表达式。

import os

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

答案 2 :(得分:2)

您可以使用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'

答案 3 :(得分:1)

只需使用string.split:

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

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

# Result should be "file.html"

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

答案 4 :(得分:0)

如果您打算使用正则表达式

,这应该有效
 for link in link_list:
    file_names.append(link.replace('.*/',''))
 print(file_names)

答案 5 :(得分:0)

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

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