Python如何用RegEx替换双引号外的逗号为|分隔符
解决方案
如果你的原始输入中双引号是HTML实体",请先执行转换:
line = line.replace('"', '"')
方法1:使用正则匹配替换(推荐)
利用正则的正向零宽断言,匹配仅出现在双引号外侧的逗号,直接完成替换:
import re # 你的原始字符串 line = '8/30/2021 19:22,server1,app1,"user1, Mrs. user2",US,One,Email, Sent,Success' # 匹配外侧逗号替换为|,最后删除多余的双引号 processed_line = re.sub(r',(?=(?:[^"]*"[^"]*")*[^"]*$)', '|', line).replace('"', '') print(processed_line)
正则逻辑说明
(?=...)是正向预查,代表当前位置后面要满足括号内的规则才会匹配成功(?:[^"]*"[^"]*")*匹配成对出现的双引号组合(非捕获组,不占用匹配结果)- 末尾的
[^"]*$匹配到字符串结束前都没有额外的双引号 - 整体规则就是:仅当逗号后面跟着偶数个双引号时,才认为这个逗号在引号外侧,执行替换
方法2:分割字符串分段处理(易理解)
如果对正则不熟悉,可以先按双引号分割字符串,偶数索引的分段是引号外部内容(替换逗号为|),奇数索引的分段是引号内部内容(不替换逗号),最后拼接即可:
line = '8/30/2021 19:22,server1,app1,"user1, Mrs. user2",US,One,Email, Sent,Success' parts = line.split('"') # 仅处理引号外的分段 for idx in range(0, len(parts), 2): parts[idx] = parts[idx].replace(',', '|') processed_line = ''.join(parts) print(processed_line)
两种方法运行后都可以得到你需要的预期输出:
8/30/2021 19:22|server1|app1|user1, Mrs. user2|US|One|Email| Sent|Success
内容的提问来源于stack exchange,提问作者user3603524
相关产品推荐
相关产品推荐

