PowerShell如何用正则匹配替换以][开头的行修复破损JSON
问题原因
- 你使用
Get-Content -Raw参数将整个文件读取为单个完整字符串,PowerShell 正则默认规则下,^锚点只会匹配整个字符串的起始位置,不会识别每行的行首位置,所以无法匹配到行开头的][字符。 - 你用的在线正则验证工具默认开启了多行匹配模式,所以测试可以命中,和PowerShell默认行为不一致才会出现匹配失败的情况。
- 正则中
[是元字符,未转义的情况下存在解析歧义,也会小概率影响匹配结果。
解决方法
在正则开头添加(?m)修饰符开启多行匹配模式,同时转义正则元字符[保证匹配准确性,替换命令如下:
$text -replace '(?m)^\]\[.*', ',' | Out-File -FilePath text_modified.json -Encoding UTF8
执行后所有以][开头的行都会被替换为逗号。
补充优化建议
你当前要修复的是拼接错误的多段JSON数组,替换完成后得到的内容是多段JSON用逗号分隔的结构,还需要在外层包裹一层[]才能得到合法的JSON文件,可直接用以下命令一步生成合法JSON:
$fixedJson = "[$($text -replace '(?m)^\]\[.*', ',')]" $fixedJson | Out-File -FilePath text_modified.json -Encoding UTF8 # 可直接解析验证 $fixedJson | ConvertFrom-Json
内容的提问来源于stack exchange,提问作者Kalleni
相关产品推荐
相关产品推荐

