我需要解析一些文本并确定哪些括号未闭合,并返回将闭合它们的括号列表,例如
如果这是输入的字符串:
({([])
然后该函数应该返回一个括号列表来关闭未匹配的集合:
['}', ')']
基本上关闭了不匹配的集合。
这是我目前拥有的代码:
def evaluate(str):
stack = []
missing = []
pushChars, popChars = "({[", ")}]"
for c in str:
if c in popChars:
matching = pushChars[popChars.index(c)]
if not len(stack) or stack[len(stack) - 1] != matching:
missing.append(c)
else:
stack.pop()
continue
if c in pushChars:
stack.append(c)
return missing
最佳答案
您可以创建一个类来解析文本对,如果未找到结束值,则可以将无效字符附加到未结束的字符列表中:
class Parse:
def __init__(self, _str, _to_find = None):
self.brackets = _str
self.converter = {'(':')', '[':']', '{':'}', ')':'(', ']':'[', '}':'{'}
self.search_for = _to_find
self.flagged = []
self.parse()
def parse(self):
_current = next(self.brackets, None)
if _current is None and self.search_for is not None:
self.flagged.append(self.search_for)
elif _current is not None:
if _current != self.search_for:
_result = Parse(self.brackets, self.converter[_current])
self.flagged.extend(_result.flagged)
self.brackets = _result.brackets
self.parse()
p = Parse(iter('({([])'))
print(p.flagged)
输出:
['}', ')']
但是请注意,如果找到了有效序列,标记
将是一个空列表 ([]
):
p = Parse(iter('{{()}}'))
print(p.flagged)
输出:
[]
关于python - 在Python中解析文本并返回不匹配括号的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814158/