首页 > 解决方案 > Python3 - 生成匹配多个正则表达式的字符串,而不修改它们

问题描述

我想使用 Python 3 生成与我的正则表达式匹配的字符串。为此,我使用了名为rstr的方便库。

我的正则表达式:

我的任务:

我必须找到一种通用方法,如何创建与我的两个正则表达式匹配的字符串。

我不能做什么:

修改两个正则表达式或以任何方式加入它们。我认为这是无效的解决方案,尤其是在不兼容的正则表达式的情况下:

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已经有了字符串,他只想以最优雅的方式检查多个正则表达式。在我的情况下,我们需要以一种匹配正则表达式的智能方式生成字符串。

标签: pythonregex

解决方案


如果您想要真正通用的方式,则不能真正使用蛮力方法。

您要寻找的是创建某种正则表达式的表示形式(就像 rstr 通过调用 sre_parse.py 所做的那样),然后调用一些 SMT 求解器来满足这两个标准。

对于 Haskell,有https://github.com/audreyt/regex-genex使用 Yices SMT 求解器来做到这一点,但我怀疑 Python 是否有类似的东西。如果我是你,我会咬紧牙关,从你的 python 程序中调用它作为外部程序。


推荐阅读