You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式从JSON文件提取指定格式的URL

优化正则表达式提取JSON中指定格式的文件URL

你的现有正则仅匹配api.example.com开头的URL,但未限定目标文件格式,且字符集存在冗余(比如不必要的&转义,JSON中实际是&)。以下是优化方案:

优化后的正则表达式

/(api\.example\.com)([\w\-.,@?^=%&:/~+#]*)\.(mp3|mp4|jpg|png)/i

正则说明

  • api\.example\.com:精确匹配目标域名,转义.避免匹配任意字符
  • ([\w\-.,@?^=%&:/~+#]*):匹配URL的路径、查询参数部分,包含所有合法的URL字符,移除了冗余转义
  • \.(mp3|mp4|jpg|png):枚举目标文件后缀,i修饰符忽略大小写,支持匹配JPG、PNG这类大写格式

实际使用示例(Python)

先解析JSON再提取URL,比直接正则匹配JSON字符串更可靠(避免误匹配键名或非URL内容):

import re
import json

# 示例JSON内容
json_data = json.loads('''
{
  "audio": "https://api.example.com/files/summer_song.mp3",
  "video": "https://api.example.com/videos/trailer.mp4?hd=1",
  "profile_img": "https://api.example.com/pics/user_avatar.JPG",
  "logo": "https://api.example.com/assets/brand_logo.png",
  "ignore": "https://api.example.com/docs/readme.txt"
}
''')

# 定义正则
pattern = r'(api\.example\.com)([\w\-.,@?^=%&:/~+#]*)\.(mp3|mp4|jpg|png)'
matched_urls = []

# 遍历JSON所有值,提取符合条件的URL
for value in json_data.values():
    if isinstance(value, str):
        match = re.search(pattern, value, re.IGNORECASE)
        if match:
            # 拼接完整URL(若原URL包含协议)
            full_url = f'https://{match.group(1)}{match.group(2)}.{match.group(3)}'
            matched_urls.append(full_url)

print(matched_urls)

注意事项

  1. 若JSON中的URL存在转义斜杠(比如https:\\/\\/api.example.com...),需调整正则为:
    /(api\\.example\\.com)([\\w\\-.,@?^=%&:\\/~+#]*)\\.(mp3|mp4|jpg|png)/i
    
  2. 如需支持更多格式,直接在后缀分组中添加即可,比如(mp3|mp4|jpg|png|gif|webm)
  3. 优先使用JSON解析库遍历值,再用正则匹配字符串,这比直接正则扫描整个JSON字符串的准确率更高

内容的提问来源于stack exchange,提问作者sina sabzevari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:21:09