Python如何用re模块替换双引号外字符串 忽略引号内内容
Python re 实现引号外True替换方案
核心逻辑
利用正则「优先匹配引号包裹内容、跳过替换」的思路,只处理双引号外侧的独立True值,不修改引号字符串内部出现的True文本。
实现代码
import re # 原始待处理字符串 raw_json = '{"name":"John", "isAdult":True, "Address":"42 True Street SomeLand"}' # 执行替换 processed = re.sub( pattern=r'(".*?")|\bTrue\b', repl=lambda m: m.group(1) if m.group(1) else '"True"', string=raw_json ) print(processed)
正则规则说明
正则表达式(".*?")|\bTrue\b包含两个按优先级从左到右匹配的分支:
- 第一分支
(".*?"):通过非贪婪模式优先捕获所有双引号包裹的字符串片段,这部分内容会原样保留,不触发替换 - 第二分支
\bTrue\b:通过单词边界符匹配独立存在的裸True,避免误匹配其他包含True字符的长词汇
替换逻辑通过匿名函数实现:
- 如果当前匹配结果捕获到了第一分支的引号内容,直接返回原文本不修改
- 如果当前匹配到的是第二分支的裸
True,返回替换后的"True"
运行结果
执行代码后输出完全符合预期:
{"name":"John", "isAdult":"True", "Address":"42 True Street SomeLand"}
注:该方案适用于双引号正确配对、无未转义内嵌双引号的场景,和题目给出的测试场景完全匹配。
内容的提问来源于stack exchange,提问作者JavaMan
相关产品推荐
相关产品推荐

