如何构建正则表达式替换JSON特定行中的方括号为下划线?
解决方案:替换特定JSON行中的方括号为下划线
核心思路
目标是仅替换键部分("data[xxx][yyy][zzz]")里的[为下划线,保留值开头的[以维持JSON数组结构。需分两步操作:先定位符合格式的目标行,再在该行内精准替换指定位置的[。
优化后的目标行匹配正则
简化你原有的多分支正则,用更通用的模式覆盖所有符合格式的行:
"data\[[^\]]+\]\[[^\]]+\]\[[^\]]+\]":\[
解释:
\[^\]]+:匹配[和]之间的任意非]字符,适配字母、数字、下划线组合的键名- 整体匹配格式为
"data[xxx][yyy][zzz]":[的行
精准替换的正则方案
方案1:正向断言匹配(支持VS Code、Python、JavaScript等工具)
仅匹配键内部的[,避免误替换值开头的[:
- 查找正则:
\[(?=.*":)
- 替换为:
_
解释:(?=.*":)是正向预查,确保匹配的[后面会出现":(属于键的部分),不会改动值开头的数组标记[。
方案2:捕获组拆分替换(兼容性更广)
把行拆分为键部分和值前缀,对键部分单独替换:
- 查找正则:
("data)(\[.*?\])(\[.*?\])(\[.*?\])(":\[)
- 替换为:
\1_\2_\3_\4\5
解释:
- 捕获组
\1对应"data,\2对应[BOT],\3对应[123],\4对应[BOT_ID],\5对应":[ - 替换时将每个捕获组前的
[替换为下划线,最终得到"data_BOT_123_BOT_ID":[
示例工具实现
Python代码示例
import re input_file = "your_file.json" output_file = "modified_file.json" # 匹配目标行的正则 line_pattern = re.compile(r'"data\[[^\]]+\]\[[^\]]+\]\[[^\]]+\]":\[') # 替换键内[的正则 replace_pattern = re.compile(r'\[(?=.*":)') with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out: for line in f_in: if line_pattern.search(line): # 仅在目标行执行替换 modified_line = replace_pattern.sub('_', line) f_out.write(modified_line) else: f_out.write(line)
VS Code可视化替换操作
- 打开目标文件,按
Ctrl+H打开替换面板 - 勾选「正则表达式」选项(点击
.*图标) - 查找框输入:
\[(?=.*":) - 替换框输入:
_ - 点击「替换全部」,仅会替换符合目标行格式的行内键部分的
[
注意事项
- 确保JSON文件每行格式规范,目标行的
"data[xxx][yyy][zzz]":[为单独一行,避免匹配精度受影响 - 替换前务必备份原文件,防止意外破坏JSON结构
内容的提问来源于stack exchange,提问作者Diego Lopes Penna
相关产品推荐
相关产品推荐

