【问题标题】: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 对不起。刚刚修好了
  • 现在它在一对正斜杠上而不是一个斜杠上拆分(正斜杠不需要转义)。

标签: python regex string replace


【解决方案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'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-11
          • 2012-07-18
          • 1970-01-01
          • 2019-10-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多