匹配两个正则表达式

Cyr*_*lop 1 python regex

我想在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

感谢您的回答和评论,我想我将从一个正则表达式生成所有字符串的集合,并使用第二个正则表达式测试它们.

Die*_*Epp 5

你可以做到,但你必须自己做.这是很多工作,你可能会认为它不值得努力.这是一种可以做到的方法:

  1. 将正则表达式A和B转换为NFA.

  2. (a,b)是NFA格式中两个正则表达式的初始状态集.

  3. 取两组的epsilon闭合,(e(a),e(b)).

  4. 对于每个符号,遵循e(a)e(b)沿符号的所有转换,以形成新的状态,(a',b').

  5. 回到第三步.

最终,您将针对两个正则表达式递归所有可能的状态集.如果在任何时候e(b)包含最终状态但e(a)不包含,那么B不包含在A.

由于存在有限数量的状态集,因此保证终止.此技术不适用于反向引用. 从技术上讲,如果你使用反向引用,那么它们就不再是正则表达式,至少从形式语言的角度来看是这样.