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

2024-06-17 13:29:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用python3生成与正则表达式匹配的字符串。为此,我使用了名为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已经有了这个字符串,他只想用最优雅的方式检查多个regex。在我的例子中,我们需要以一种与regex匹配的智能方式生成字符串。你知道吗


Tags: 方法字符串importrestring方式解决方案python3
3条回答

如果你想要真正通用的方法,你不能真正使用暴力方法。你知道吗

您需要的是创建regexp的某种表示(就像rstr通过调用sre所做的那样)_解析.py)然后调用SMT求解器来满足这两个条件。你知道吗

对于Haskell,有https://github.com/audreyt/regex-genex使用Yices SMT solver来实现这一点,但我怀疑Python是否有类似的功能。如果我是你,我会咬紧牙关把它称为python程序中的外部程序。你知道吗

我不知道是否有什么东西能满足你的需要。 但我会这样做(就像你已经做过的那样):

  1. 使用重新编译()功能。你知道吗
  2. 基于第一个正则表达式生成字符串。你知道吗
  3. 使用search()方法将得到的字符串传递到第二个regex对象中。你知道吗
  4. 如果通过了。。。你的字符串通过了两个正则表达式。你知道吗

也许您可以创建一个函数并将两个regex作为参数传递,然后使用相同的逻辑测试“2乘2”。你知道吗

如果你有8个正则表达式要匹配。。。 只要做:

call (regex1, regex2)
call (regex2, regex3)
call (regex4, regex5)
...

我用另一种方法解决了这个问题。注意,第二个regex基本上是保险的,所以在我们的新字符串中只生成小写字母。你知道吗

我使用了Google的python包sre_yield,它允许字符集限制。包也可以在PyPi上获得。我的代码:

import sre_yield
import string

sre_yield.AllStrings(r'^[abc]+.', charset=string.ascii_lowercase)[0]
# returns `aa`

相关问题 更多 >