如何用Python风格正则提取URL路径最后部分(不含域名及后缀)
用Python提取URL路径最后部分(不带后缀和域名)
针对你的需求,这里给两种靠谱的实现方式:
方法一:正则表达式修正
你之前的正则问题出在:负向预查的位置不对,而且.png里的点没转义(正则里.匹配任意字符),导致没起到过滤后缀的作用。
修正后的正则可以直接匹配最后一个斜杠到.png之间的内容:
import re url = 'https://ncd.soft.com/lags/prime-amazon.png' # 匹配最后一个/后、.png前的内容,忽略结尾可选的/ match_result = re.search(r'/([^/.]+)\.png/?$', url) if match_result: print(match_result.group(1)) # 输出 prime-amazon
正则说明:
/:定位到路径的最后一个斜杠([^/.]+):捕获除了/和.之外的所有字符(也就是不带后缀的文件名)\.png:精确匹配后缀(转义.避免匹配任意字符)/?$:允许URL结尾有可选的斜杠
方法二:用标准库解析URL(更推荐)
正则处理URL容易踩坑(比如遇到带参数、锚点的复杂URL),用Python自带的urllib.parse和os模块解析更稳妥:
from urllib.parse import urlparse import os url = 'https://ncd.soft.com/lags/prime-amazon.png' # 解析URL得到路径部分 parsed_path = urlparse(url).path # 提取路径最后一段文件名 filename = os.path.basename(parsed_path) # 拆分文件名和后缀,取前面部分 result = os.path.splitext(filename)[0] print(result) # 输出 prime-amazon
为什么你的原正则失效?
你的正则([^/]+(?!.png))/?$中:
[^/]+会匹配从最后一个斜杠到结尾的所有字符(也就是prime-amazon.png)(?!.png)是负向预查,它会检查当前位置后面有没有.png,但因为[^/]+已经匹配到了结尾,这个预查根本没起到过滤作用;而且.没转义,会匹配任意字符,逻辑本身就错了。
内容的提问来源于stack exchange,提问作者Takawako
相关产品推荐
相关产品推荐

