是否有一个库可以根据正则表达式生成数据? (Python或其他)

发布于 2024-09-14 13:31:15 字数 265 浏览 4 评论 0原文

给定一个正则表达式,我想生成随机数据 x 次来测试某些内容。

例如,

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

当然,目标是做一些比电话号码和电子邮件地址更复杂的事情。

这样的事情存在吗?如果存在,Python 是否存在?如果没有,我可以用什么线索/理论来做到这一点?

Given a regexp, I would like to generate random data x number of time to test something.

e.g.

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

Of course the objective is to do something a bit more complicated than that such as phone numbers and email addresses.

Does something like this exists? If it does, does it exists for Python? If not, any clue/theory I could use to do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缱绻入梦 2024-09-21 13:31:15

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)

Pyparsing includes this regex inverter, which returns a generator of all permutations for simple regexes. Here are some of the test cases from that 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:

To do your random selection, create a list (once!) of your permutations, and then call random.choice on the list each time you want a random string that matches the regex, something like this (untested):

class RandomString(object):
    def __init__(self, regex):
        self.possible_strings = list(invRegex.invert(regex))
    def random_string(self):
        return random.choice(self.possible_strings)
故事与诗 2024-09-21 13:31:15

Python 邮件列表上有一篇文章生成正则表达式所有排列的模块。我不太确定你会如何随机化它。我会继续检查。

There is a post on the Python mailing list about a module that generates all permutations of a regex. I'm not so sure how you might go about randomising it though. I'll keep checking.

若能看破又如何 2024-09-21 13:31:15

我可能会因为提出这个建议而受到鞭打,但 Perl 有一个模块可以做到这一点。您可能想看看如何在 python 中实现它的代码:

http://p3rl.org/字符串::随机

I will probably be flogged for suggesting this, but perl has a module that does exactly this. You might want to take a look at the code how to implement it in python:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文