Если у меня есть цепочка вызовов методов в Python, как мне извлечь вызовы верхнего уровня с помощью pyparsing?
Tldr;функция должна вести себя так:
_parse_commands("df.hi()[['fi']](__call__).NI(ni='NI!')")
['df', '.hi()', "[['fi']]", '(__call__)', ".NI(ni='NI!')"]
Я даже не смог правильно проанализировать вызов метода:
from pyparsing import Word, alphas, nums, Literal, alphanums, printables, Optional, locatedExpr, originalTextFor, SkipTo
identifier = Word(alphas + '_', alphanums + '_').setName("identifier")
lparen = Literal("(")
rparen = Literal(")")
function_call = identifier + lparen + Optional(printables) + rparen
function_call.parseString("hi()")
# (['hi', '(', ')'], {})
# but
function_call.parseString("hi(ho)")
# ...
# ParseException: Expected ")" (at char 3), (line:1, col:4)
Проблема в том, что я не могу найти какой-либо способ сказатьpyparsing, чтобы «принести мне что-нибудь между разделителями» - это то, что я пытаюсь с печатными материалами выше.Я также пытался использовать OriginalTextFor для решения той же проблемы.
Кроме того, если в ответе можно использовать locationExpr для определения местоположения вызовов функций, это было бы здорово.