python - Python3 - 生成匹配多个正则表达式的字符串,而不修改它们
问题描述
我想使用 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已经有了字符串,他只想以最优雅的方式检查多个正则表达式。在我的情况下,我们需要以一种匹配正则表达式的智能方式生成字符串。
解决方案
如果您想要真正通用的方式,则不能真正使用蛮力方法。
您要寻找的是创建某种正则表达式的表示形式(就像 rstr 通过调用 sre_parse.py 所做的那样),然后调用一些 SMT 求解器来满足这两个标准。
对于 Haskell,有https://github.com/audreyt/regex-genex使用 Yices SMT 求解器来做到这一点,但我怀疑 Python 是否有类似的东西。如果我是你,我会咬紧牙关,从你的 python 程序中调用它作为外部程序。
推荐阅读
- java - java.lang.ClassNotFoundException:使用 Maven 依赖项时的 oracle.jdbc.OracleDriver
- wordpress - 如何在自定义 wordpress 页面中添加自定义标签选项?
- java - createEntityManagerFactory 和 netbuddy 问题
- python-3.x - 如何将各个列的 1 和 0 的值替换为数据框的单列?
- signalr - 如何在 Blazor 服务器端更新多个用户?
- sql - 具有 auto_increment 的两列
- php - 有没有办法在不使用 Imagick 和其他库的情况下检查 .gif 图像是否透明?
- bash - 按名称递归查找所有文件,使用shell脚本解密并重命名它们
- regex - $regex 查找整个单词,mongodb
- angular - 如何为Angular 8找到具有特定值的对象数量