我想使用 Python 3 生成与我的正则表达式匹配的字符串。为此,我使用名为 rstr 的便捷库.
我的正则表达式:
^[abc]+.
[a-z]+
我的任务:
我必须找到一种通用的方法,如何创建匹配我的两个正则表达式的字符串。
我不能做什么:
修改两个正则表达式或以任何方式加入它们。我认为这是无效的解决方案,尤其是在正则表达式不兼容的情况下:
import re
import rstr
regex1 = re.compile(r'^[abc]+.')
regex2 = re.compile(r'[a-z]+')
for index in range(0, 1000):
generated_string = rstr.xeger(regex1)
if re.fullmatch(regex2, generated_string):
break;
else:
raise Exception('Regexes are probably incompatibile.')
print('String matching both regexes is: {}'.format(generated_string))
是否有任何解决方法或任何神奇的库可以处理这个问题?任何见解表示赞赏。
看似相似但毫无帮助的问题:
提问者已经了字符串,他只是想以最优雅的方式检查多个正则表达式。在我的例子中,我们需要以匹配正则表达式的智能方式生成字符串。
最佳答案
如果你想要真正通用的方法,你就不能真正使用蛮力方法。
您要寻找的是创建某种正则表达式表示(就像 rstr 通过调用 sre_parse.py 所做的那样),然后调用一些 SMT 求解器来满足这两个条件。
对于 Haskell,有 https://github.com/audreyt/regex-genex它使用 Yices SMT 求解器来做到这一点,但我怀疑 Python 是否有类似的东西。如果我是你,我会硬着头皮从你的 python 程序中调用它作为外部程序。
关于Python3 - 生成匹配多个正则表达式的字符串,而不修改它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611374/