如何提取不定长URL中.mp3前的ID并拼接为指定格式链接
URL提取ID并重组方案
不管URL中间路径有多少层、长度多少,不需要写死路径匹配规则,只靠URL本身的固定特征就能完成提取重组,核心逻辑:
- 提取URL的协议+根域名部分(即
https://urlexample.com段) - 提取最后一个
/和.mp3后缀之间的内容,就是需要的ID字段 - 按
根域名/audio/ID的格式拼接即可得到目标结果
通用正则方案(跨语言可用)
直接用正则捕获两个需要的片段,替换拼接就行,适配任意长度的中间路径:
正则匹配规则:
^(https?://[^/]+)/.*?/([^/]+)\.mp3$
替换模板:
$1/audio/$2
常用语言实现示例
- Python
import re def format_mp3_url(raw_url: str) -> str: return re.sub(r'^(https?://[^/]+)/.*?/([^/]+)\.mp3$', r'\1/audio/\2', raw_url) # 测试 test_urls = [ "https://urlexample.com/EXAMPLE_STRING/media/example/audio/20227/07/1657142074431_15789.mp3", "https://urlexample.com/media/THIS_TEXT_IS_1657130179082_24048.mp3" ] for u in test_urls: print(format_mp3_url(u))
运行输出:
https://urlexample.com/audio/1657142074431_15789 https://urlexample.com/audio/THIS_TEXT_IS_1657130179082_24048
- JavaScript
const formatMp3Url = (rawUrl) => { return rawUrl.replace(/^(https?:\/\/[^/]+)\/.*?\/([^/]+)\.mp3$/, '$1/audio/$2') } // 测试 const testUrls = [ "https://urlexample.com/EXAMPLE_STRING/media/example/audio/20227/07/1657142074431_15789.mp3", "https://urlexample.com/media/THIS_TEXT_IS_1657130179082_24048.mp3" ] testUrls.forEach(u => console.log(formatMp3Url(u)))
字符串切割实现(无正则依赖)
如果不想用正则,直接靠字符串切割也能实现,逻辑更直白,同样不受中间路径长度影响:
def format_mp3_url_split(raw_url: str) -> str: # 移除.mp3后缀 url_no_ext = raw_url.removesuffix('.mp3') # 按斜杠拆分取最后一段,就是目标ID target_id = url_no_ext.split('/')[-1] # 定位根域名结束位置(即域名后第一个斜杠的索引) domain_end_idx = url_no_ext.find('/', len('https://')) root_domain = url_no_ext[:domain_end_idx] return f"{root_domain}/audio/{target_id}"
如果遇到URL带查询参数(比如.mp3?from=search这类格式),只需要在处理前先把?及后续内容截断,再走上面的逻辑即可,不需要调整核心规则。
内容的提问来源于stack exchange,提问作者ToraLytc
相关产品推荐
相关产品推荐

