如何在多个括号的最里面的括号内提取字符串

时间:2019-06-25 11:34:43

标签: python-3.x

我有一个像下面这样的布尔表达式

(((x12 & x20) & x05) | x02) | ((x12 & x13)) | (x13 | x20)

并且我正在尝试在最里面的括号内提取字符串。 但是,我不知道如何检测最里面的括号。

结果

  

(x12&x20)

2 个答案:

答案 0 :(得分:0)

下面是我的 Python 解决方案,时间复杂度为 O(N)

str1 = "(a(b(c)d)(e(f)g)hi)"
str2 = "(((x12 & x20) & x05) | x02) | ((x12 & x13)) | (x13 | x20)"

def innermost_level(str1):
    level_dict = {}
    level = 0
    level_char = ''
    for s in str1:
        if s == '(':
            if level not in level_dict:
                level_dict[level] = [level_char]
            elif level_char != '':
                level_dict[level].append(level_char)
            level_char = ''
            level += 1
        elif s == ')':
            if level not in level_dict:
                level_dict[level] = [level_char]
            elif level_char != '':
                level_dict[level].append(level_char)
            level_char = ''
            level -= 1
        else:
            level_char += s
    print(level_dict) # {0: [''], 1: ['a', 'hi'], 2: ['b', 'd', 'e', 'g'], 3: ['c', 'f']}
    max_level = max(level_dict.keys())
    return level_dict[max_level]

print(innermost_level(str1)) # ['c', 'f']
print(innermost_level(str2)) # ['x12 & x20']

答案 1 :(得分:-1)

由于我们正在寻找最里面的括号内容,因此您可以使用regex查找括号\((.*?)\)内且不包含闭合括号{{ 1}}:

[^\(]

输出

  

(x12&x20)