8

正規表現が与えられた場合、何かをテストするためにランダム データ x 回数を生成したいと思います。

例えば

>>> print generate_date('\d{2,3}')
13
>>> print generate_date('\d{2,3}')
422

もちろん、目的は、電話番号や電子メール アドレスなどよりも少し複雑なことを行うことです。

このようなものは存在しますか?もしそうなら、それはPython用に存在しますか? そうでない場合、それを行うために使用できる手がかり/理論はありますか?

4

3 に答える 3

8

Pyparsing には、単純な正規表現のすべての順列のジェネレーターを返すこの正規表現インバーターが含まれています。そのモジュールのテスト ケースの一部を次に示します。

[A-C]{2}\d{2}
@|TH[12]
@(@|TH[12])?
@(@|TH[12]|AL[12]|SP[123]|TB(1[0-9]?|20?|[3-9]))?
@(@|TH[12]|AL[12]|SP[123]|TB(1[0-9]?|20?|[3-9])|OH(1[0-9]?|2[0-9]?|30?|[4-9]))?
(([ECMP]|HA|AK)[SD]|HS)T
[A-CV]{2}
A[cglmrstu]|B[aehikr]?|C[adeflmorsu]?|D[bsy]|E[rsu]|F[emr]?|G[ade]|H[efgos]?|I[nr]?|Kr?|L[airu]|M[dgnot]|N[abdeiop]?|Os?|P[abdmortu]?|R[abefghnu]|S[bcegimnr]?|T[abcehilm]|Uu[bhopqst]|U|V|W|Xe|Yb?|Z[nr]
(a|b)|(x|y)

編集:

random.choiceランダムな選択を行うには、順列のリストを (一度!) 作成し、次のような正規表現に一致するランダムな文字列が必要になるたびにリストを呼び出します (未テスト):

class RandomString(object):
    def __init__(self, regex):
        self.possible_strings = list(invRegex.invert(regex))
    def random_string(self):
        return random.choice(self.possible_strings)
于 2010-08-13T13:59:47.637 に答える
2

正規表現のすべての順列を生成するモジュールに関する投稿がPythonメーリングリストにあります。ただし、ランダム化する方法はよくわかりません。確認し続けます。

于 2010-08-13T13:43:43.477 に答える
1

私はおそらくこれを提案したことでむち打たれるでしょうが、perl にはまさにこれを行うモジュールがあります。Python での実装方法については、次のコードを参照してください。

http://p3rl.org/String::ランダム

于 2010-08-13T13:44:19.157 に答える