Python如何忽略引号内的逗号进行字符串分割?
处理这种带引号包裹含逗号字段的CSV行,不建议自己写split或简单正则,优先用Python内置的csv模块,能完美处理各种CSV格式边缘情况;如果一定要用正则,也可以实现。
方法一:使用csv模块(推荐)
Python的csv模块专门为解析CSV格式设计,自动识别引号内的逗号不做分割,还能处理转义引号等复杂场景。
代码示例:
import csv from io import StringIO # 假设s是你的多行内容列表 s = ['21467,dog,888,"apples,oranges,melons",777'] for line in s: # 将单行字符串转为类文件对象供csv.reader读取 csv_reader = csv.reader(StringIO(line)) # 读取当前行的解析结果 parsed_line = next(csv_reader) print(parsed_line)
输出结果:['21467', 'dog', '888', 'apples,oranges,melons', '777']
方法二:使用正则表达式
如果场景简单,也可以用正则匹配两种字段:被双引号包裹的内容,或者不含逗号和双引号的内容。
代码示例:
import re # 正则匹配规则:要么匹配双引号内的内容,要么匹配非逗号的连续字符 pattern = re.compile(r'(?:"([^"]*)"|([^,]+))') s = ['21467,dog,888,"apples,oranges,melons",777'] for line in s: # 找到所有匹配项 matches = pattern.findall(line) # 合并匹配结果,过滤空值 parsed_line = [item for group in matches for item in group if item] print(parsed_line)
输出结果和上面一致。
注意:正则方法无法处理字段内有转义双引号的情况(比如"I said ""yes""",foo),这种场景还是用csv模块更可靠。
内容的提问来源于stack exchange,提问作者yesiamamir
相关产品推荐
相关产品推荐

