如何用正则表达式从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)
注意事项
- 若JSON中的URL存在转义斜杠(比如
https:\\/\\/api.example.com...),需调整正则为:/(api\\.example\\.com)([\\w\\-.,@?^=%&:\\/~+#]*)\\.(mp3|mp4|jpg|png)/i - 如需支持更多格式,直接在后缀分组中添加即可,比如
(mp3|mp4|jpg|png|gif|webm) - 优先使用JSON解析库遍历值,再用正则匹配字符串,这比直接正则扫描整个JSON字符串的准确率更高
内容的提问来源于stack exchange,提问作者sina sabzevari
相关产品推荐
相关产品推荐

