python - 在Python中解析文本并返回不匹配括号的列表

标签 python python-3.x stack

我需要解析一些文本并确定哪些括号未闭合,并返回将闭合它们的括号列表,例如

如果这是输入的字符串:

({([])

然后该函数应该返回一个括号列表来关闭未匹配的集合:

['}', ')']

基本上关闭了不匹配的集合。

这是我目前拥有的代码:

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/

相关文章:

python - 在圆上生成点

python - 无法理解 Perl 中的正则表达式修饰符以转换为 Python

python - Python 中的 MCTS *树* 并行化 - 可能吗?

java - java 如何删除指向数组中元素的指针

python - Ansible 不再有效

python - 为 mongoengine 0.9.0 StringField 设置正则表达式模式

python - 跟踪方法 'u' 参数相当于trace_add?

python - 检索脚本中的可用函数(相同顺序)

c - 堆栈中变量的顺序 (GCC)

Java:用一个队列实现堆栈,有什么问题吗?