Python3 - 生成匹配多个正则表达式的字符串,而不修改它们

标签 python regex

我想使用 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/

相关文章:

java - 使用正则表达式解析街道地址

python - 限制每个 App Engine 实例的任务请求数

ruby - 如何按空格或点拆分字符串?

Python 和 Matplotlib : reduce number of x tick marks and remove zero-padding

python - 从 Python 中的压缩文本文件中读取行并获取读取的原始压缩字节数

python - URI 正则表达式模式匹配

正则表达式排除查找工具的单词

javascript - "/\((.*)\)/"和 "/\(([^\)]*)\)/"之间有区别吗?

python - 从 Flask 中的另一条路线调用一条路线

python - python 集合可以包含的值的数量是否有限制?