少し前に、ウィキリークスが公開したケーブル用のBNF ベースの文法を書き始めました。しかし、私のアプローチはおそらく最善ではないことに気づき、改善を求めています。
ケーブルは 3 つの部分で構成されています。head にはRFC2822スタイルのフォーマットがあります。これは通常正しく解析されます。テキスト部分は、よりカジュアルな仕様になっています。たとえば、REFラインがあります。これは で始まるはずREF:
ですが、異なるバージョンが見つかりました。次の正規表現は、ほとんどのケースをキャッチします: ^\s*[Rr][Ee][Ff][Ss: ]
. そのため、前にスペースがあり、さまざまな場合があります。テキスト部分はほとんどがプレーン テキストで、特別な形式の見出しがいくつかあります。
各フィールド (日付、REF など) を認識し、データベースに入れたいと考えています。Pythons SimpleParse を選択しました。現時点では、認識できない各フィールドで解析が停止します。現在、よりフォールト トレラントなソリューションを探しています。すべてのフィールドには何らかの順序があります。パーサーがフィールドを認識しない場合、現在のフィールドに「認識されない」ブロブを追加して続行する必要があります。(または、ここでより良いアプローチがあるかもしれません)。
どのような種類のパーサーまたは他の種類のソリューションを提案しますか? 周りに何か良いものはありますか?