如何用正则表达式提取URL中最后一段(含扩展名)以外的内容
提取URL中除最后带扩展名的文件段之外的内容
嘿,我来帮你搞定这个正则表达式的需求!其实思路很简单——我们只需要匹配到URL中最后一个斜杠(包含)之前的所有内容,就能得到你想要的结果。下面给你两种靠谱的正则方案,还有一个非正则的简便方法作为备选。
方案一:捕获组匹配核心路径
这个正则通过捕获组直接提取我们需要的部分:
^(.*\/)[^\/]+\.\w+$
正则解释:
^:锚定字符串的开头,确保从URL最开始匹配(.*\/):这是我们要的捕获组,匹配任意字符直到最后一个斜杠(包含斜杠本身)[^\/]+:匹配最后一段里的文件名(非斜杠的字符,至少一个)\.\w+:匹配文件扩展名(点+至少一个字母/数字/下划线)
使用示例(Python):
import re url = "http://stackoverflow.com/stuff/code/apple.jpg" match_result = re.search(r'^(.*\/)[^\/]+\.\w+$', url) if match_result: target_path = match_result.group(1) print(target_path) # 输出:http://stackoverflow.com/stuff/code/
方案二:正向预查匹配(无需捕获组)
如果你不想用捕获组,可以试试正向预查的写法,直接匹配到目标内容:
^.*\/(?=[^\/]+\.\w+$)
正则解释:
^.*\/:匹配从开头到最后一个斜杠的所有内容(?=[^\/]+\.\w+$):正向预查,确保后面跟着的是「文件名+扩展名」的结构,避免误匹配
使用示例(Python):
import re url = "http://stackoverflow.com/stuff/code/apple.jpg" match_result = re.search(r'^.*\/(?=[^\/]+\.\w+$)', url) if match_result: target_path = match_result.group() print(target_path) # 输出:http://stackoverflow.com/stuff/code/
备选:非正则的简便方法
如果你的场景不需要正则,用字符串拆分可能更直观:
url = "http://stackoverflow.com/stuff/code/apple.jpg" # 从右边按斜杠拆分1次,取前面的部分再加斜杠 target_path = url.rsplit('/', 1)[0] + '/' print(target_path)
这几种方法都能处理任意层级的目录,不管你的图片在多少层嵌套里,都能准确提取到文件所在的父路径~
内容的提问来源于stack exchange,提问作者Gavin Gregory
相关产品推荐
相关产品推荐

