TL; DR:んPythonでエスケープされた区切り文字で行を分割する
line = "one|two|three\|four\|five"
fields = line.split(whatever)
whatever
のどのような価値のために:
fields == ['one', 'two', 'three\|four\|five']
私はパイプ文字で区切られたファイルを持っています。そのファイルのフィールドの中には、先頭のバックスラッシュでエスケープされたパイプも含まれています。
たとえば、このファイル内のデータの単一の行が['one', 'two', 'three\|four\|five']
の配列表現があるかもしれません、これは私は、ファイルを制御することはできませんone|two|three\|four\|five
としてファイルに表されます。私はファイルを前処理することができません。私はにを1回の分割で行うことができます。
最終的には、このファイルの各行を別々のフィールドに分割する必要がありますが、先行するバックスラッシュはあらゆる種類の問題であることが判明しています。最初はネガティブ・ルック・アヘッドを使ってみましたが、Pythonの文字列と二重エスケープ文字を取り囲んでいて、理解できないようなものがあります。
解説は説明していますが、任意です。 [^\\]
が\
の異なる任意のcaracterに一致する
[^\\]\|
:
エスケープシーケンスを考慮して独自のパーサを記述すると、Pythonのregexがそれを処理できません。 –
最終的に期待される出力は何かを明確にすることができますか? '[one'、two '、' three \ | four \ | five '] 'または' [one '、' two '、' three '、' four '、' five ']'? – Sundeep
@spasic:前者。 –