我正在努力根据变量分隔符拆分文本行,并保留空字段和引用的数据。在
示例:
1,"2",three,'four, 4',,"6\tsix"
或以制表符分隔的vesion
^{pr2}$两者都会导致:
['1', '"2"', 'three', 'four, 4', '', "6\tsix"]
到目前为止,我试过:
使用split,但是很明显,引用的分隔符没有按需要处理。
使用csv库的解决方案,但它倾向于提供引用所有内容或不引用任何内容的选项,而不保留原始引号。
Regex,特别是遵循以下答案中的模式,但它会删除空字段:How to split but ignore separators in quoted strings, in python?
使用pyparsing库。我管理的最好的方法如下,但这也会删除空字段(使用逗号分隔符示例):
s = '1,"2",three,\'four, 4\',,"6\tsix"'
wordchars = (printables + ' \t\r\n').replace(',', '', 1)
delimitedList(OneOrMore(quotedString | Word(wordchars)), ',').parseWithTabs().parseString(s)
谢谢你的建议!在
使用此模式匹配双引号外的逗号
,(?=(?:(?:[^"]*\"){2})*[^"]*$)
Demo
编辑: 要在双引号或引号之外拆分逗号,请使用此模式
,(?=(?:(?:[^'\"]*(?:\"|')){2})*[^'\"]*$)
Demo
为什么你说regex会掉空字段?Alan More在referenced post中的回答建议
我试了一下(在用}你所说的期望是什么
,
更改;
)后,发现{这对我有用:
给予
^{pr2}$避免使用空白字符或所有可打印字符创建单词。Pyparsing不做任何前瞻性工作,这些表达式可能包含的内容可能比您计划的多得多。在
相关问题 更多 >
编程相关推荐