可能重复:
在python中反转正则表达式
我想我遇到的问题听起来比它更容易......我不太确定.我想定义一个正则表达式,我想构建一些匹配它的字符串.
我可以导入任何具有此功能的模块吗?优选地,不是使用re.search或的蛮力方法re.match.必须有一种更优雅的方式来做到这一点.
对于我正在研究的项目的测试目的,如果给出正则表达式,我需要随机生成一个将由FAIL匹配的字符串.例如,如果我给这个正则表达式:
^[abcd]d+
Run Code Online (Sandbox Code Playgroud)
然后我应该能够生成如下字符串:
hnbbad
uduebbaef
9f8;djfew
skjcc98332f
Run Code Online (Sandbox Code Playgroud)
...每个都与正则表达式不匹配,但不生成:
addr32
bdfd09usdj
cdddddd-9fdssee
Run Code Online (Sandbox Code Playgroud)
......每一个DO.换句话说,我想要像反Xeger这样的东西.
这样的库是否存在,最好是用Python(如果我能理解这个理论,我很可能在需要的时候把它转换成Python)?我考虑过如何写这个,但考虑到正则表达式的范围,似乎可能比Xeger可以解决的问题困难得多.我也四处寻找一个预制的库来做这件事,但要么我没有使用正确的关键字进行搜索,要么之前没有人遇到过这个问题.
我正在尝试有效地提取静态字符串(必须匹配给定正则表达式匹配的字符串).我已经能够在最简单的情况下完成它,但我正在尝试发现一个更强大的解决方案.
鉴于如下所示的正则表达式
"fox jump(ed|ing|s)"
Run Code Online (Sandbox Code Playgroud)
会给我们的
"fox,jumped,jumping,jumps"
Run Code Online (Sandbox Code Playgroud)
另一个例子是
"fox jump(ed|ing|s)?"
Run Code Online (Sandbox Code Playgroud)
哪会给我们
"fox,jump"
Run Code Online (Sandbox Code Playgroud)
因为可选的运算符
我现在的算法过于简单了.它将从正则表达式的末尾开始并删除组或单个字符,然后是这些运算符"*?" 以及"爆炸"分组OR运算符"(|)".这种方法效果很好,但没有考虑正则表达式的完整语法.您可以将其视为正则表达式的最小集生成过程(正则表达式可以"生成/必须匹配"的最小字符串集).
为什么? 我试图将一堆文本与大量正则表达式进行匹配.如果我可以获得"必需"这些正则表达式的"关键字"列表,我可以对该关键字进行快速文本搜索,以过滤我关心的正则表达式(忽略我保证不匹配的正则表达式,甚至跳过该文本完全有效地没有在文本上运行任何正则表达式,因为我们保证在我们的正则表达集中没有匹配).我可以在一个有效的数据结构(Binary Search/Trie/Aho-Corasick)中组织这组关键字,以便在我尝试通过有限自动机运行文本之前过滤一组正则表达式.在尝试运行正则表达式之前,我可以将极快的字符串匹配算法作为过滤阶段运行.在这个简单的过程中,我已经能够提高吞吐量.
假设我有以下字符串:
trend = '(A|B|C)_STRING'
Run Code Online (Sandbox Code Playgroud)
我想将其扩展为:
A_STRING
B_STRING
C_STRING
Run Code Online (Sandbox Code Playgroud)
OR条件可以是字符串中的任何位置.即STRING_(A|B)_STRING_(C|D)
会扩大到
STRING_A_STRING_C
STRING_B_STRING C
STRING_A_STRING_D
STRING_B_STRING_D
Run Code Online (Sandbox Code Playgroud)
我还想介绍一个空条件的情况:
(|A_)STRING 会扩大到:
A_STRING
STRING
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试的:
def expandOr(trend):
parenBegin = trend.index('(') + 1
parenEnd = trend.index(')')
orExpression = trend[parenBegin:parenEnd]
originalTrend = trend[0:parenBegin - 1]
expandedOrList = []
for oe in orExpression.split("|"):
expandedOrList.append(originalTrend + oe)
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用.
使用正则表达式有没有简单的方法呢?
在 python 中,我正在寻找 python 代码,我可以使用它来创建与任何正则表达式匹配的随机数据。例如,如果正则表达式是
\d{1,100}
Run Code Online (Sandbox Code Playgroud)
我想要一个随机数列表,随机长度在 1 到 100 之间(均匀分布)
有一些可用的“正则表达式反相器”(请参阅此处)可以计算所有可能的匹配,这不是我想要的,而且非常不切实际。例如,上面的示例有超过 10^100 个可能的匹配项,这些匹配项永远无法存储在列表中。我只需要一个函数来随机返回匹配项。
也许已经有一个可用的软件包可以用来完成此任务?我需要一个函数来为任何正则表达式创建匹配字符串,而不仅仅是给定的一个或其他正则表达式,但可能是 100 个不同的正则表达式。我只是无法自己对它们进行编码,我希望函数提取模式以返回一个匹配的字符串。
我尝试学习python3,我与正则表达式堆叠一点.我为此研究了HOWTO,但我不太了解.这页
1\d2\D2
^a\w+z$
Run Code Online (Sandbox Code Playgroud)