我正在尝试分析用户输入,该用户输入指定了要在字典中查找的值。
例如,此用户输入可以是字符串fieldA[5]
。然后,我需要在字典中查找键fieldA
(将是列表),然后在位置5
处抓取元素。这应该可以推广到列表的任何深度,例如fieldA[5][2][1][8]
,并因无效输入fieldA[5[
或fieldA[5][7
而正常失败。
我调查过这样做:
import re
key = "fieldA[5]"
re.split('\[|\]', key)
结果为:
['fieldA', '5', '']
这可以作为输出(我可以用它在字典中查找),但实际上并没有强制执行或检查方括号对,并且在如何读取以及如何使用此输出在字典中查找方面不直观。
是否有解析器库或其他可用方法?
答案 0 :(得分:0)
如果您不希望它变得比您所描述的复杂得多,则可以使用一些正则表达式。我通常不会为此目的推荐它,但我希望您能够从某个地方开始...
import re
key = input('Enter field and indices (e.g. "fieldA[5][3]"): ')
field = re.match(r'[^[]*', key).group(0)
indices = [int(num) for num in re.findall(r'\[(\d+)]', key)]
这将根本无法识别出缺少的字段或不正确的括号,并分别返回空字符串或列表。