Y at-il un lib pour générer des données selon une expression régulière? (Python ou autre)

StackOverflow https://stackoverflow.com/questions/3477300

  •  28-09-2019
  •  | 
  •  

Question

Etant donné une expression rationnelle, je voudrais générer un nombre x de données aléatoires de temps à quelque chose de test.

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 cela existe? Si elle le fait, est-ce qu'il existe pour Python? Dans le cas contraire, aucun indice / théorie je pourrais utiliser pour le faire?

Était-ce utile?

La solution

pyparsing comprend cette expression rationnelle onduleur , qui renvoie 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)

Modifier

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 à l'expression rationnelle, quelque chose comme ça (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)

Autres conseils

Il y a un poste sur le Python liste de diffusion d'un module qui génère toutes les permutations d'une expression régulière. Je ne suis pas sûr de savoir comment vous pouvez aller sur randomiser cependant. Je vais continuer à vérifier.

Je vais probablement fouetté pour suggérer, 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top