You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:39:01