如何编写正则移除字符串冒号后双引号(适配PowerShell、Python)
优化实现方案
核心思路是放弃手动拆分行、逐段处理拼接的冗余逻辑,用跨PowerShell、Python双环境兼容的单次正则替换完成全部操作,不需要复杂的流程遍历。
通用正则规则
采用兼容两个环境正则引擎的匹配逻辑:(:\s*)"(.*?)"
- 匹配范围锁定在冒号之后,完全不会触碰键名位置的双引号
- 第一捕获组保存冒号及后续的任意数量空白(空格、制表符),替换时原样保留
- 惰性匹配捕获双引号包裹的宏变量内容,替换时自动去掉前后包裹的两个双引号
- 替换规则为
$1$2(PowerShell)或\1\2(Python),直接把匹配到的带双引号的值部分替换为去掉引号的内容
各环境简化实现
PowerShell 版本
不需要拆分字符串、循环遍历,直接用内置的字符串替换能力完成:
$String = '{ "NodeID": "${NodeID}", "EventID": "${EventID}" }' # 单次正则替换即可得到目标结果 $OutPutString = $String -replace '(:\s*)"(.*?)"', '$1$2' $OutPutString
相比原来的实现,代码量减少80%以上,同时自动处理换行符、多键值对的匹配场景,不需要手动维护拼接逻辑。
Python 版本
完全复用相同的正则规则,不需要为跨环境调整写法:
import re input_str = '''{ "NodeID": "${NodeID}", "EventID": "${EventID}" }''' output_str = re.sub(r'(:\s*)"(.*?)"', r'\1\2', input_str) print(output_str)
方案优势
- 无额外的字符串拆分、数组遍历、换行拼接逻辑,代码极简
- 匹配边界清晰:只处理冒号后的值位置引号,不会误伤键名的双引号
- 正则规则双环境完全通用,不需要单独适配
- 天然支持多行、多键值对的场景,哪怕同一行存在多个键值对也能正确匹配
注意:如果后续值的内容本身包含双引号,只需要把惰性匹配
.*?调整为适配嵌套引号的规则即可,在当前宏变量的场景下完全满足需求。
内容的提问来源于stack exchange,提问作者Martin Crothers
相关产品推荐
相关产品推荐

