2012-01-19 8 views
3

私はテストすべき正規表現の長いリストを持っています。 1つずつリストを歩いて、可能な場合は各式に適用可能なテストを書くのではなく、正規表現のタイプを考慮して適切な入力文字列を生成するジェネレータ関数を作成したいと思います。例えば正規表現の入力タイプを決定する

rgx = re.compile(r'^item_(?P<item_number>\d+)$') 

は、正規表現がマッチすることを入力の種類を判断することは可能ですか?上記の例を考えて、正規表現がコンパイルされた正規表現から必要とする入力(item_23​​567など)を判断することは可能ですか?

+0

関連:http://stackoverflow.com/questions/2905229/reverse-regular-expressions-to-generate-data and http://stackoverflow.com/questions/205411/random-string-that-matches-a -regexp –

+0

あなたの意図がはっきりしない。ジェネレータ関数はどのように見えますか? –

+3

正規表現をテストしたい場合は、正規表現から期待されるinと出力を生成しないと、最初にそれらをテストする点を完全に無効にしますか? – klennepette

答えて

0

この答えは抽象的に問題を定義するのは良い仕事をしていません: https://stackoverflow.com/a/208112/1092724

Pythonのソリューション: Reversing a regular expression in Python

A Javaライブラリソリューション: http://code.google.com/p/xeger/

これらの解決策には限界がないわけではない。見ますhttp://code.google.com/p/xeger/wiki/XegerLimitations

コメントからプルXegerの制限ページにADE

「それはxegerの現在の実装では、ランダムにその文字列を生成するために、FSMを横断ことは注目に値します。あなたの後にマッチする文字を持つ正規表現がある場合。 、遷移は状態の状態に戻されます。その後のすべての単一の州のための。それは後に、それぞれの状態でますます起こりそうになります。*そのxegerがこれまでに受理状態に到達します。」

(@Highly不定休)自分のコメントで同様の懸念を表明した。

これが一般的ですあなたが必要とするものが確かに規則的かつ明確に定義されているならば、これらのアプローチのうちの1つは、あなたが探しているものを見つけることができます。

0

一般的にはexに対しては不可能です正規表現を扱いました。

Do all regular expressions halt?

最も重要なのは、あなたが今までにテストとしてそれを使用する任意の正規表現にマッチした、いくつかのあいまいな、回旋状のテキストを、生成されたOracleを持っていた場合は?与えられた正規表現が一致するように設計されているか、一致しなければならないことが、テキストのごみのメガバイトが実際に与えられているかどうかは、どのようにして知ることができますか?

関連する問題