有没有办法在字符串中获取匹配括号的索引?例如,对于这个:
parseDateEntry(date) == parseDateAttribute(rideshareDate)
我想获得一本包含值的词典:
parseDateEntry(date).getTime() == parseDateAttribute(rideshareDate).getTime()
表示索引4和14上的括号匹配,7和8表示匹配。 非常感谢。
答案 0 :(得分:11)
你的意思是一种自动化方式? 我不这么认为。
您需要使用堆栈创建程序,在找到打开的括号时按下索引,并在找到右括号时弹出它。
在Python中,您可以轻松地将列表用作堆栈,因为它们具有append()
和pop()
方法。
def find_parens(s):
toret = {}
pstack = []
for i, c in enumerate(s):
if c == '(':
pstack.append(i)
elif c == ')':
if len(pstack) == 0:
raise IndexError("No matching closing parens at: " + str(i))
toret[pstack.pop()] = i
if len(pstack) > 0:
raise IndexError("No matching opening parens at: " + str(pstack.pop()))
return toret
希望这有帮助。
答案 1 :(得分:5)
检查平衡括号的标准方法是使用堆栈。在Python中,这可以通过附加到标准列表并从中弹出来完成:
javascript
结果:
text = 'aaaa(bb()()ccc)dd'
istart = [] # stack of indices of opening parentheses
d = {}
for i, c in enumerate(text):
if c == '(':
istart.append(i)
if c == ')':
try:
d[istart.pop()] = i
except IndexError:
print('Too many closing parentheses')
if istart: # check if stack is empty afterwards
print('Too many opening parentheses')
print(d)
答案 2 :(得分:0)
也试试这个。
def match(str):
stack = []
ans = {}
for i,ch in enumerate(str):
if ch == "(":
stack.append(i)
else :
try:
if ch == ")":
ans[stack.pop()] = i
continue
except:
return False
if len(stack) > 0:
return False
else:
return ans
test_str = "()"
print(match(test_str))