Python如何高效分割字符串且忽略引号内的分隔符?
高效分割字符串(忽略引号内的分隔符)
直接用Python内置的csv模块是最高效且可靠的方案——这个模块本身就是为处理带引号的分隔符场景设计的,底层实现经过优化,比手动拆分或正则更适合处理大量数据。
示例代码
import csv from io import StringIO s = 'name,12345,Hello,"12,34,56",World' # 用StringIO把字符串模拟成文件对象,供csv.reader读取 reader = csv.reader(StringIO(s), delimiter=',', quotechar='"') # 读取第一行(因为只有一行数据) result = next(reader) print(result) # 输出:['name', '12345', 'Hello', '12,34,56', 'World']
备选方案:正则表达式
如果不想引入csv模块,也可以用正则匹配,但要注意正则对复杂场景(比如引号转义)的处理需要调整:
import re s = 'name,12345,Hello,"12,34,56",World' # 匹配规则:要么是不在引号内的非逗号字符,要么是成对引号包裹的内容 pattern = re.compile(r'(?:"[^"]+"|[^,]+)') # 提取后去掉首尾的引号 result = [item.strip('"') for item in pattern.findall(s)] print(result) # 输出:['name', '12345', 'Hello', '12,34,56', 'World']
为什么不推荐手动拆分?
手动按引号拆分再拼接的方式需要处理大量边界判断(比如引号是否成对、转义引号等),代码繁琐且容易出错,同时效率远不如内置的csv模块——毕竟csv模块的核心逻辑是用C实现的,处理大规模数据时性能差距会非常明显。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

