如何用PowerShell正则移除含RG的{}包裹内容
移除含"RG "的JSON风格大括号块的PowerShell正则方案
需求说明
- 批量处理目标目录(含子目录)下的
.json、.vap、.vaj格式文件 - 移除所有包含
RG字符串的{}包裹块(包含大括号本身) - 原方案依赖固定行数匹配,无法适配不同行数的块,需通用正则解决方案
改进后的PowerShell代码
Get-ChildItem $VAMfixDir -Recurse -Include *.json,*.vap,*.vaj | Where-Object { $timestamp -lt $_.CreationTime } | Foreach-Object { $originalContent = $_ | Get-Content -Raw # 匹配含RG 的任意行数{}块,同时处理块后可能存在的逗号,避免破坏格式 $potentiallyModifiedContent = $originalContent -Replace '(?s)\s*{\s*[^}]*RG\s[^}]*}\s*(,)?', '$1' Set-Content -NoNewLine -Encoding Ascii -LiteralPath $_.FullName -Value $potentiallyModifiedContent }
正则表达式解析
(?s):开启单行模式,让.匹配包括换行在内的所有字符,适配多行内容的块\s*:匹配任意数量的空白字符(换行、空格、制表符),兼容不同缩进格式{\s*[^}]*RG\s[^}]*}:匹配左大括号到右大括号的完整块,确保块内包含RG字符串([^}]*匹配除右大括号外的任意内容)(,)?:捕获块后面可能存在的逗号,避免删除块后留下多余逗号破坏JSON结构'$1':保留捕获到的逗号(如果有),否则替换为空,保证文件格式合法性
示例效果验证
原始JSON结构:
"morphs" : [ { "uid" : "AQ_Eun-Ju-Body-2022-31-7--15_02_30.592.vmi", "name" : "AQ_Eun-Ju-Body", "value" : "1" }, { "uid" : "RG side2side.vmi", "name" : "RG side2side", "value" : "-0.3332869" } ]
处理后结果:
"morphs" : [ { "uid" : "AQ_Eun-Ju-Body-2022-31-7--15_02_30.592.vmi", "name" : "AQ_Eun-Ju-Body", "value" : "1" } ]
内容的提问来源于stack exchange,提问作者Puck
相关产品推荐
相关产品推荐

