На ваш вопрос уже дан ответ, и это немного не по теме, но ...
Если вы хотите разобрать код, часто проще и менее подвержен ошибкам использовать синтаксический анализатор. Если ваш код является кодом Python, Python поставляется с парой парсеров ( tokenize , ast , parser ). Для других языков вы можете найти много парсеров в интернете. ANTRL хорошо известен с привязками Python .
Например, следующие несколько строк кода печатают все строки модуля Python, которые не являются комментариями и не являются строками документации:
import tokenize
ignored_tokens = [tokenize.NEWLINE,tokenize.COMMENT,tokenize.N_TOKENS
,tokenize.STRING,tokenize.ENDMARKER,tokenize.INDENT
,tokenize.DEDENT,tokenize.NL]
with open('test.py', 'r') as f:
g = tokenize.generate_tokens(f.readline)
line_num = 0
for a_token in g:
if a_token[2][0] != line_num and a_token[0] not in ignored_tokens:
line_num = a_token[2][0]
print(a_token)
Поскольку a_token
выше уже проанализирован, вы также можете легко проверить определение функции. Вы также можете отслеживать, где заканчивается функция, посмотрев на начало текущего столбца a_token[2][1]
. Если вы хотите делать более сложные вещи, вы должны использовать ast.