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

如何在Python中按逗号分割字符串但忽略$符号间的逗号?

解决CSV分割时忽略$符号间逗号的问题

针对你需要按逗号分割CSV行但忽略$符号对之间逗号的需求,这里提供两种实用方案:

方案一:使用正则表达式快速处理

借助re.findall匹配符合规则的字段,代码简洁高效:

import re

line = "$abc,def$,$ghi$,$jkl,mno$"
# 匹配规则:要么是$包裹的内容,要么是不含逗号的普通字段
fields = re.findall(r'\$.*?\$|[^,]+', line)
print(fields)
# 输出: ['$abc,def$', '$ghi$', '$jkl,mno$']

正则说明:

  • \$.*?\$:非贪婪匹配从$开始到最近$结束的内容,避免跨多个$对的错误匹配
  • [^,]+:匹配所有不含逗号的字符,处理不在$包裹中的普通字段

方案二:手动状态机处理(无正则依赖)

通过维护"是否处于$包裹中"的状态,逐字符遍历处理,适合需要自定义扩展的场景:

line = "$abc,def$,$ghi$,$jkl,mno$"
fields = []
current_field = []
in_dollar = False

for char in line:
    if char == '$':
        # 切换$包裹状态
        in_dollar = not in_dollar
        current_field.append(char)
    elif char == ',' and not in_dollar:
        # 仅当不在$中时,用逗号分割字段
        fields.append(''.join(current_field))
        current_field = []
    else:
        current_field.append(char)
# 加入最后一个未分割的字段
if current_field:
    fields.append(''.join(current_field))

print(fields)
# 输出: ['$abc,def$', '$ghi$', '$jkl,mno$']

两种方案都能精准得到你需要的分割结果,可根据实际场景选择:正则方案更简洁,状态机方案灵活性更强。

内容的提问来源于stack exchange,提问作者finjasnappy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:15:41