Python分隔线拆分问题

2024-09-29 20:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力根据变量分隔符拆分文本行,并保留空字段和引用的数据。在

示例:

1,"2",three,'four, 4',,"6\tsix"

或以制表符分隔的vesion

^{pr2}$

两者都会导致:

['1', '"2"', 'three', 'four, 4', '', "6\tsix"]

到目前为止,我试过:

  1. 使用split,但是很明显,引用的分隔符没有按需要处理。

  2. 使用csv库的解决方案,但它倾向于提供引用所有内容或不引用任何内容的选项,而不保留原始引号。

  3. Regex,特别是遵循以下答案中的模式,但它会删除空字段:How to split but ignore separators in quoted strings, in python?

  4. 使用pyparsing库。我管理的最好的方法如下,但这也会删除空字段(使用逗号分隔符示例):

    s = '1,"2",three,\'four, 4\',,"6\tsix"'
    wordchars = (printables + ' \t\r\n').replace(',', '', 1)
    delimitedList(OneOrMore(quotedString | Word(wordchars)), ',').parseWithTabs().parseString(s)
    

谢谢你的建议!在


Tags: 数据in文本示例内容制表符splitthree
3条回答

使用此模式匹配双引号外的逗号
,(?=(?:(?:[^"]*\"){2})*[^"]*$)
Demo

编辑: 要在双引号或引号之外拆分逗号,请使用此模式
,(?=(?:(?:[^'\"]*(?:\"|')){2})*[^'\"]*$)
Demo

为什么你说regex会掉空字段?Alan More在referenced post中的回答建议

re.split(''';(?=(?:[^'"]|'[^']*'|"[^"]*")*$)''', data)

我试了一下(在用,更改;)后,发现{}你所说的期望是什么

这对我有用:

import pyparsing as pyp

pyp.delimitedList(pyp.quotedString | pyp.SkipTo(',' | pyp.LineEnd()), ',') \
    .parseWithTabs().parseString(s)

给予

^{pr2}$

避免使用空白字符或所有可打印字符创建单词。Pyparsing不做任何前瞻性工作,这些表达式可能包含的内容可能比您计划的多得多。在

相关问题 更多 >

    热门问题