我想在Python中比较两个正则表达式.
基本上,我需要测试一个表达式是否包含在另一个表达式中.
例如,[AB] D包含在[AB] [CD]中.或......是...... K ..包括在...... [KR] ..
我试过类似下面的东西,但它不起作用:
re.finditer(r"[AB][DF]",r"[AB]D")
re.finditer(r"[AB]D",r"[AB][CD]")
Run Code Online (Sandbox Code Playgroud)
我的表达式可以有不同的大小,但具有相同大小表达式的解决方案会很棒.
编辑
我所有的正则表达都很简单.
它们只包含"点","方形布料"和"^".
.表示"任何东西"(如真正的正则表达式中的*)
[AB]表示"A或B"
[^ P]表示"不是P"
编辑2
感谢您的回答和评论,我想我将从一个正则表达式生成所有字符串的集合,并使用第二个正则表达式测试它们.
你可以做到,但你必须自己做.这是很多工作,你可能会认为它不值得努力.这是一种可以做到的方法:
将正则表达式A和B转换为NFA.
设(a,b)是NFA格式中两个正则表达式的初始状态集.
取两组的epsilon闭合,(e(a),e(b)).
对于每个符号,遵循e(a)和e(b)沿符号的所有转换,以形成新的状态,(a',b').
回到第三步.
最终,您将针对两个正则表达式递归所有可能的状态集.如果在任何时候e(b)包含最终状态但e(a)不包含,那么B不包含在A.
由于存在有限数量的状态集,因此保证终止.此技术不适用于反向引用. 从技术上讲,如果你使用反向引用,那么它们就不再是正则表达式,至少从形式语言的角度来看是这样.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |