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字符串和双重转义字符的奥秘,我不明白,这使我无法搞清楚。
该解决方案的解释是值得赞赏的,但是可选的。
答案 0 :(得分:2)
你可以使用像
这样的正则表达式re.split(r'([^|]+[^\\])\|', line)
将使用字符组来指定除\
之后的任何内容,后跟|
将用于执行拆分
这会在列表的开头给出一个额外的空匹配,但希望你可以解决这个问题
re.split(r'([^|]+[^\\])\|', line)[1:]
这仍然受到Wiktor提出的解析问题的影响,当然
答案 1 :(得分:0)
也许你可以使用这样的东西:
[^\\]\|
其中[^\\]
匹配\
不同的任何字符。