我想使用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))
是否有任何解决方法或任何神奇的库可以解决此问题?任何见解都很感激。
Asker 已经有字符串,他只是想以最优雅的方式针对多个正则表达式进行检查。就我而言,我们需要以一种与正则表达式匹配的聪明方式生成字符串。
答案 0 :(得分:1)
如果您要使用通用方法,就不能真正使用蛮力方法。
您要寻找的是创建某种形式的regexp(就像rstr通过调用sre_parse.py所做的那样),然后调用一些SMT求解器来满足这两个条件。
对于Haskell,有https://github.com/audreyt/regex-genex使用Yices SMT求解器来做到这一点,但是我怀疑Python是否有类似的东西。如果我是你,我会咬一口子弹,然后从您的python程序中将其称为外部程序。
答案 1 :(得分:0)
我不知道是否有什么东西可以满足您的需求。 但我会做类似的事情(就像您已经做过的那样):
也许您可以创建一个函数并将两个正则表达式作为参数传递,并使用相同的逻辑测试“ 2 by 2”。
然后如果您要匹配8个正则表达式... 只要做:
call (regex1, regex2)
call (regex2, regex3)
call (regex4, regex5)
...
答案 2 :(得分:0)