如何在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
相关产品推荐
相关产品推荐

