Pyparsing будет анализировать довольно сложные выражения, и поведение по умолчанию - остановка, когда правила синтаксического анализа не находят ничего другого для анализа. Например, если вы предполагаете, что ваш ведущий раздел представляет собой просто произвольную строку вложенных скобок, вы можете использовать встроенный в Pyparsing nestedExpr
parser:
>>> import pyparsing as pp
>>> s = "(x=1)@blahblah"
>>> print(pp.nestedExpr().parseString(s))
[['x=1']]
Более полный пример может быть:
ppc = pp.pyparsing_common
assignment_expr = ppc.identifier + '=' + ppc.number
fn_call = ppc.identifier + pp.nestedExpr() # lazy definition of arg list in ()'s
# a woefully incomplete parser for Python statements
statement_expression = fn_call | assignment_expr
LPAR, RPAR = map(pp.Suppress, "()")
prefix = LPAR + statement_expression + RPAR
print(prefix.parseString(s))
Примечание: я автор pyparsing.