固定されていないパターンを持つ正規表現

固定されていないパターンを持つ正規表現

次のように、サンプル入力を含むファイルと一致する正しい正規表現(Pythonと互換性がある)を見つけようとします。

On the third day of Christmas
 my true love sent to me:
 three worms a eating
 two garlic cloves
 and a koala in a bamboo spree

これは単なる可能性です。重要なのは、最初の行に「On the X day of Christmas」があり、誤った大文字の使用(ChrISTmasなど)がないことです。

これ

\^On the [first|second|third|fourth]... 

12番目までです。結末は同じで、最後の行ただ「もう一つあるのに…」

 $and a *\         (?)

しかし、正規表現を使用して、ファイルの各行が正しい順序になっていることをどのように確認できますか?

たとえば、「3つのワーム」の前に「2つのニンニク...」と入力すると、正しくありません。

 On the third day of Christmas
 my true love sent to me:
 two garlic cloves         #SWITCHED
 three worms a eating
 and a koala in a bamboo spree

同様にジャンプもできません。 「Five X's」で始まる場合、次の行は「Four Y's」、「Three」、「Two」などでなければなりません。

 On the third day of Christmas
 my true love sent to me:
 five cats a dancing       #Goes from 'five cats' to 'two garlic', not ok
 two garlic cloves
 and a koala in a bamboo spree

以下は、複数行の正規表現を一致させずに試したいくつかの試みです。http://www.codeshare.io/jLI9l

以下は、ファイル入力を削除して別のことを試みた別の例です。http://www.codeshare.io/u4E7t

入力ファイルの構造/一致が正しい場合は、一致して「正しい」を印刷したいと思います。

ベストアンサー1

私にとって、正規表現は、テストする新しい行ごとに最初の単語の前の数字を覚えることができるメモリの種類が必要なので、実際には最善のアプローチではありません。

私はそれを実行できないと言うわけではありません(限られた数のセットを持っているので、技術的に本当に不快な複数行の正規表現を使用して、可能なすべてのファイルの組み合わせを「手動で」列挙できます)。私の言葉は次のとおりです。実際にPythonコードを書いて(より速く)行うことができるときに優先的にそれを行いますか?["one", ..., "twelve"]すべての数字と日をソートしたリストのようなものを持ち、ファイルを["first", ..., "twelfth"](1つの大きなファイルに)行ごとに分割してからstr(sリストにしてstrfor、そのリストのインデックスを使用して行をテストできますか?ループ?

おすすめ記事