【问题标题】:Extract every expression between parentheses in python提取python中括号之间的每个表达式
【发布时间】:2021-03-28 22:09:08
【问题描述】:

我正在尝试编写类似 gdb 的调试器,但在提取括号之间的表达式(从字符串)时遇到问题。

例如,我想要以下代码的输出:

extract_expression('*((*0x802F18B4) + 4)')

成为:

['(*0x802F18B4)', '((*0x802F18B4) + 4)', '*((*0x802F18B4) + 4)']

括号中最内部的元素到外部元素。

【问题讨论】:

  • 你能展示一个带有有效python表达式的例子吗?还是表达式*((*0x802F18B4) + 4) 是一个字符串?
  • 是的,它是一个字符串
  • 这个表达式是一个字符串,然后我用 python 求值
  • 您的预期结果与括号的嵌套级别不一致。应该是['*0x802F18B4', '(*0x802F18B4) + 4', '*((*0x802F18B4) + 4)']['(*0x802F18B4)', '((*0x802F18B4) + 4)', "('*((*0x802F18B4) + 4)')"]

标签: python regex string extract


【解决方案1】:

此答案仅使用您提供的输入和输出进行测试。

也许可以用正则表达式以更简单、更高效的方式解决。

def extract_expression(expression):
    open_parenthese_indexes = [i for i, c in enumerate(expression) if c == '(']
    close_parenthese_indexes = [i for i, c in enumerate(expression) if c == ')']

    close_parenthese_indexes.reverse()

    res = [expression]
    for i, index in enumerate(open_parenthese_indexes):
        start_index = index
        end_index = close_parenthese_indexes[i] + 1
        res.append(expression[start_index:end_index])
    res.reverse()

    return res

if __name__ == '__main__':
    expected_result = ['(*0x802F18B4)', '((*0x802F18B4) + 4)', '*((*0x802F18B4) + 4)']
    result = extract_expression('*((*0x802F18B4) + 4)')
    assert expected_result == result

【讨论】:

    猜你喜欢
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多