使用Python生成与正则表达式匹配的字符串

26

可能是重复问题:
在python中反转正则表达式

我想我遇到了一个听起来比实际复杂的问题......我不太确定。 我想定义一个正则表达式,并且我想构建一些匹配它的字符串。

有没有可以导入的模块具有此功能? 最好不使用re.searchre.match的蛮力方法。 必须有更优雅的方法来完成这项任务。


请查看以下链接:https://dev59.com/YXRB5IYBdhLWcg3w1Kv0 - virhilo
3个回答

42

我一直在为使用Python生成随机字符串的辅助库开发。

它包括一个方法xeger(),允许您从正则表达式创建字符串:

>>> import rstr
>>> rstr.xeger(r'[A-Z]\d[A-Z] \d[A-Z]\d')
u'M5R 2W4'

目前,它能够处理大多数基本的正则表达式。


没有Python3的版本? - Gadelkareem
1
适用于python3.8.1。 - sn0b4ll

12

+1 运行得非常好!它甚至可以使用 easy_install 安装 :) - Morten Jensen
7
唉,这是GPL许可证,如果您在商业软件中使用它会造成污染,所以不能使用。 - JDonner
1
https://bitbucket.org/leapfrogdevelopment/rstr/ 有一个 xeger 方法,并且是 MIT 许可证。 - fjsj
2
为了澄清JDonner的评论,对于任何发现这一点的人:它是AGPL; 即使您将其用于服务器端商业软件,也不能不发布使用此库的整个可执行文件的源代码。 - btown
@JDonner,btown - 你们说得好像这是一件坏事。 - user234461
2
我想这并不一定是件坏事,但人们在使用该库之前了解许可证要求非常重要! - Dobes Vandermeer

0

对于一些正则表达式,可能的字符串列表是无限的。例如:

a*

包含

a
aa
aaa

因此,没有办法为给定的正则表达式生成所有字符串。


3
更重要的是,您编写用于生成任意字符串的函数可能会在a*处陷入无限循环。 - fredley
4
asciimoo指向了使用生成器实现的exrex。这样,您可以轻松控制输出及其大小。 - Morten Jensen
4
不完全是。要求是匹配一个正则表达式。"a"就可以了,不需要生成所有可能的情况。 - Cyril N.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接