代码之家  ›  专栏  ›  技术社区  ›  Mehdi Khademloo

正则表达式可以处理嵌套操作吗?

  •  4
  • Mehdi Khademloo  · 技术社区  · 7 年前

    "1+""2*3"*4"+"5*6""

    (1+((2*3)*4)+(5*6))

    1 回复  |  直到 7 年前
        1
  •  6
  •   willeM_ Van Onsem    7 年前

    有效的 ,我们可以利用这种语言的一些冗余约束来添加适当的括号。但这实际上更多的是使用“技巧”。我真的建议使用更复杂的工具,比如 (因此 ).

    这里有一点我们可以发现:那就是如果下一个字符是一个数字,或者是一个双引号序列,后跟一个数字,所有其他双引号。

    所以我们基本上可以用两个正则表达式来实现这一点:

    • 第一个替换所有双引号,这些双引号后面跟零个或多个双引号,后面跟一个数字;和

    如果原始输入有效,则可以使用。如果它在运算符周围包含双引号,如 "+" ,则会产生完全不同的结果。

    例如,在Python中,我们可以使用:

    from re import sub
    
    def add_brackets(text):
        return sub(r'["](?=\"*[(\d])', '(', text).replace('"', ')')
    

    这就给了我们:

    >>> add_brackets('"1+""2*3"*4"+"5*6""')
    '(1+((2*3)*4)+(5*6))'
    

    “递归语言”(特定元素的井语言) 但是,通过为此构建的工具更好地解析 push down automaton .

    这个 pumping lemma for regular languages ( N 不 平衡支架 史蒂芬·克林 .