使用递归在Python中实现一个简单的正则表达式语言

时间:2013-11-05 00:10:40

标签: python regex algorithm recursion

我会尝试使描述尽可能简单。

我被要求为正则表达式提供一个解决方案,只有 0 1 0\*匹配任何内容或任何只有 0 的字符串。

我有三个运营商.\*|

  • .结合了两个正则表达式 r1 r1 r1 匹配 s1 r2 匹配s2, s = s1 + s2

  • |就像或者,结合r1,r2,r1匹配s1或r2匹配s2会使(r1|r2) matches s = s1 + s2

  • \*只是明星案例,没有或更多逻辑。

所有运算符以及0和1都存储在二叉树中。

如需完整参考:http://www.cdf.toronto.edu/~heap/148/F13/Assignments/A2/a2.pdf

我正在尝试寻找一种递归解决方案。

((1.(0|1)\*).0)(任何字符串以 1 开头,以 0 结尾)匹配100101010作为示例:

右侧的.是正则表达式树的根,其左子1.(0|1)\*和右子0,递归求解match('1.(0|1)\*', 10010101),为其右子0 },递归解决match('0', 0)

对于正确的孩子,它将返回true,

左侧部分继续递归步骤。

这样的东西
def match(rx, s):
    if rx == s:
         // base case when s is 0 or 1
         return True
    else:
         return False
    x = 'some number'
    s1 = s[:x]
    s2 = s[x:]
    if rx.operator == '.':
       return match(rx.left, s1) and match(rx.right, s2)
    elif rx.operator == '|':
       return match(rx.left, s1) or match(rx.right, s2)
    else:
       return solveStar(rx, s)

我现在卡住了两部分,首先应该如何划分字符串以匹配子正则表达式,第二部分我很困惑解决星形*案例

0 个答案:

没有答案