次のように、サンプル入力を含むファイルと一致する正しい正規表現(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リストにしてstr
)for
、そのリストのインデックスを使用して行をテストできますか?ループ?