0

したがって、単一の正規表現を使用して数ビットのデータを抽出する長い入力文字列があります。入力はクライアントによって提供され、正規表現が一致するために必要なだけでなく (そうです)、この正規表現が構築するデータベースに不可欠な重要な部分をしばしば忘れます。

入力のどこで一致が失敗し始め、その理由を指摘できるようにしたいと思います(正規表現が次に何を期待していたかを示します)。

パフォーマンスが問題です。正規表現には複数のフィールドが含まれているため、これをいくつかの個別の正規表現一致に分割することは禁止されている場合があります。

これが本物のカットダウンバージョンです:

^(?:(?P<doors>\d) Doors).*(?P<transmission>Automatic|Manual)

いくつかのサンプル入力 (および必要な出力):

"3 Doors blah blah blah Manual"  # match!
"Guadeloupe blah blah blah Sneezes"  # Reply: Missing doors
"2 Doors blah blah blah Psychic" # Reply: Missing transmission 
4

2 に答える 2

2

問題が広すぎて、Python Regex Engine で処理できません。有限オートマトン エンジン (より具体的な NFA) が必要です。独自のパーサーを作成し、文字列をフィードして、失敗する場所と理由を確認します。

または、PyParsingを使用して、 http://pyparsing.wikispaces.com/file/view/dfmparse.pyのようなGrammar ( PyParsing Wikiにある多くの例) を作成することもできます 。PyParsing を初めて使用する場合は、学習曲線が急になりますが、概念を理解してしまえば、意図したことを実装するのは簡単なことです。

于 2013-09-13T09:15:06.203 に答える