我有一个像下面这样的布尔表达式
(((x12 & x20) & x05) | x02) | ((x12 & x13)) | (x13 | x20)
并且我正在尝试在最里面的括号内提取字符串。 但是,我不知道如何检测最里面的括号。
结果
(x12&x20)
答案 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)