PowerShell文本格式化:补全变量列缺失的右侧单引号
解决PowerShell格式转换中的引号缺失问题
需求说明
原始文件内容:
pc_cc_text$fx_review1 CONSTANT VARCHAR2(100) := 'For Company Review'; -- AD_PRT_AUTH_(MSP) pc_cc_text$fx_review2 CONSTANT VARCHAR2(100) := 'For Dept Review'; -- AD_PRT_AUTH_(ADX)
需要转换为以下格式:
WHEN 'pc_cc_text$fx_review1' THEN 'For Company Review' WHEN 'pc_cc_text$fx_review2' THEN 'For Dept Review'
现有问题
使用原PowerShell脚本执行后,变量名右侧的单引号缺失,输出结果如下:
WHEN 'pc_cc_text$fx_review1 THEN 'For Company Review' WHEN 'pc_cc_text$fx_review2 THEN 'For Dept Review'
解决方案
改用正则表达式精准捕获变量名和常量值,替换原分步替换的逻辑,修改后的脚本如下:
Get-Content FILE | Where-Object { $_ -match ':=' -and $_ -notmatch '^--' } | ForEach-Object { if ($_ -match '^\s*(\w+\$?\w+)\s+CONSTANT\s+VARCHAR2\(\d+\)\s+:=\s*(.*?);') { "WHEN '$($matches[1])' THEN $($matches[2])" } }
脚本说明
- 用
Where-Object过滤有效行:包含:=且不是以--开头的注释行 - 通过正则表达式
^\s*(\w+\$?\w+)\s+CONSTANT\s+VARCHAR2\(\d+\)\s+:=\s*(.*?);捕获两个关键部分:- 第一个分组
(\w+\$?\w+):匹配带$符号的变量名 - 第二个分组
(.*?);:匹配包含单引号的常量值(截止到分号前)
- 第一个分组
- 直接拼接成目标格式字符串,确保变量名被单引号正确包裹,同时保留常量值的原有格式
内容的提问来源于stack exchange,提问作者user27817415
相关产品推荐
相关产品推荐

