【问题标题】:Extract file name with a regular expression使用正则表达式提取文件名
【发布时间】:2018-10-19 02:27:25
【问题描述】:

我想创建一个正则表达式来提取 url 的文件名

https://example.net/img/src/img.jpg

我要提取img1.jpg

我使用python中的urlparse,但它以这种方式提取路径

img/src/img.jpg

如何使用正则表达式提取文件名

【问题讨论】:

  • 如果你想要正则表达式,试试\/(\w+\.\w+$),但使用split() 恕我直言更好

标签: python regex


【解决方案1】:

使用str.split 和负索引

url = "https://example.net/img/src/img.jpg"
print(url.split("/")[-1])

输出:

img.jpg

或使用os.path.basename

import urlparse, os
url = "https://example.net/img/src/img.jpg"
a = urlparse.urlparse(url)
print(os.path.basename(a.path))   #--->img.jpg

【讨论】:

    【解决方案2】:

    如果你的 url 模式是静态的,你可以使用积极的前瞻,

    import re
    pattern =r'\w+(?=\.jpg)'
    
    text="""https://example.net/img/src/img.jpg
    """
    
    
    print(re.findall(pattern,text)[0])
    

    输出:

    img
    

    【讨论】:

      【解决方案3】:

      您可以在/ 上使用split 并选择返回数组的最后一个元素(我认为最好的解决方案)

      或者如果你真的想使用正则表达式,你可以使用下面的

      (?<=\/)(?:(?:\w+\.)*\w+)$
      

      请注意,仅接受以下文件名:DEMO

      如有必要,您可以调整和更改\w 以接受其他字符。

      说明:

      • (?&lt;=\/) /$ 的正向后视添加文件名字符串是路径的最后一个元素的约束
      • (?:(?:\w+\.)*\w+) 用于提取由几个字母/数字组成的单词,最后是下划线后跟一个点,该组可以根据需要重复多次(例如xxx.tar.gz 文件),然后是最终扩展名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        相关资源
        最近更新 更多