在Python中使用转义分隔符拆分行

时间:2016-08-01 13:08:02

标签: python regex split negative-lookahead

TL; DR:

Nested fields for each data type

line = "one|two|three\|four\|five" fields = line.split(whatever) 的值是什么:

whatever

我有一个由管道符号分隔的文件。该文件中的某些字段还包含管道,由前导反斜杠转义。

例如,此文件中的单行数据可能具有fields == ['one', 'two', 'three\|four\|five'] 的数组表示形式,并且这将在文件中表示为['one', 'two', 'three\|four\|five']

我无法控制文件。我无法预处理该文件。我一次性完成。

我最终需要将此文件的每一行拆分为单独的字段,但这种反斜杠被证明是各种各样的麻烦。我最初尝试使用负向前瞻,但有一些围绕python字符串和双重转义字符的奥秘,我不明白,这使我无法搞清楚。

该解决方案的解释是值得赞赏的,但是可选的。

2 个答案:

答案 0 :(得分:2)

你可以使用像

这样的正则表达式
re.split(r'([^|]+[^\\])\|', line)

将使用字符组来指定除\之后的任何内容,后跟|将用于执行拆分

这会在列表的开头给出一个额外的空匹配,但希望你可以解决这个问题

re.split(r'([^|]+[^\\])\|', line)[1:]

这仍然受到Wiktor提出的解析问题的影响,当然

答案 1 :(得分:0)

也许你可以使用这样的东西:

[^\\]\|

其中[^\\]匹配\不同的任何字符。