匹配两个正则表达式

时间:2014-08-27 15:40:17

标签: 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]")

我的表达式可以有不同的大小,但是具有相同大小表达式的解决方案会很棒。

修改

我所有的正则表达都很简单。

他们只包含"积分","方括号"和" ^"。

。意味着"任何东西" (如* in real regexps)   
[AB]表示" A或B"   
[^ P]表示"不是P"

编辑2

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

1 个答案:

答案 0 :(得分:5)

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

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

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

  3. 取两个集的epsilon闭包,(e(a),e(b))

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

  5. 回到第三步。

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

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