2010-08-13 1 views
8

Étant donné une regexp, je voudrais générer des données aléatoires x nombre de fois pour tester quelque chose.Existe-t-il une lib pour générer des données selon une regexp? (Python ou autre)

par exemple.

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

Bien sûr, l'objectif est de faire quelque chose d'un peu plus compliqué que cela, comme les numéros de téléphone et adresses e-mail.

Est-ce que quelque chose comme ça existe? Si c'est le cas, cela existe-t-il pour Python? Si non, toute idée/théorie que je pourrais utiliser pour faire cela?

Répondre

7

pyparsing comprend this regex inverter, qui retourne un générateur de toutes les permutations pour regexes simples. Voici quelques-uns des cas de test à partir de ce module:

[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) 

Edit:

Pour faire votre sélection aléatoire, créez une liste (une fois!) De vos permutations, puis appelez random.choice sur la liste chaque fois que vous voulez une chaîne aléatoire qui correspond à la regex, quelque chose comme ceci (non testé):

class RandomString(object): 
    def __init__(self, regex): 
     self.possible_strings = list(invRegex.invert(regex)) 
    def random_string(self): 
     return random.choice(self.possible_strings) 
+0

+1 C'est génial! – katrielalex

+0

Presque ce que je cherche. +1 –

+0

J'ai également empaqueté ce module en tant qu'utilitaire sur UtilityMill: http://utilitymill.com/utility/Regex_inverter. Tous les utilitaires de messagerie unifiée exposent les API XML et JSON. Vous pouvez donc appeler cela à distance à partir de votre propre code, et UtilityMill effectue le traitement d'inversion de regex. – PaulMcG

2

There is a post dans la liste de diffusion Python à propos d'un module qui génère toutes les permutations d'une regex. Je ne suis pas sûr de savoir comment vous pourriez procéder à la randomisation si. Je vais continuer à vérifier.

+0

+1 parce que vous l'avez recherché. –

+0

@ e-satis - Je l'ai trouvé quelque part ailleurs sur SO :) – detly

1

Je serai probablement fouetté pour avoir suggéré cela, mais perl a un module qui fait exactement cela. Vous voudrez peut-être jeter un oeil sur le code comment le mettre en œuvre en python:

http://p3rl.org/String::Random

+0

SO n'a pas encore de bouton [whip], donc vous êtes en sécurité. – detly

+0

Intéressant de savoir qu'il existe, au moins pour perl. +1 –

Questions connexes