Нужно регулярное выражение, чтобы захватить все входные функции в файле Python - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно регулярное выражение для захвата / получения количества входных функций, используемых в коде Python.

Я пробовал это: /input\((.)*\)/gm

НоЯ не хочу, чтобы это захватывало что-то вроде этого:

someVariable = "input( )"


Регулярное выражение, которое я хочу, должно быть в состоянии сделать что-то вроде этого:

Код:

number = int(input("Enter a number: "))
someVariable = "input( )"
number2 = int(input ("Number: ") )

На выходе должно быть 2 совпадения (функция ввода в строках 1 и 3). Он не должен совпадать с input () в строке 2.


PS: я новичок в регулярном выражении, поэтому было бы неплохо, если бы вы также могли написать объяснение своему регулярному выражениюрешение.

1 Ответ

1 голос
/ 03 ноября 2019

Я бы не рекомендовал использовать регулярные выражения для решения этой проблемы по тем же причинам, по которым не следует использовать регулярные выражения для анализа XML . Независимо от того, какое регулярное выражение вы придумали, оно, вероятно, не будет охватывать 100% случаев в любом случае и окажется слишком сложным и не поддерживаемым.

Гораздо более надежный способ подсчета количества вызововк определенной функции в Python является преобразование файла Python в абстрактное синтаксическое дерево через встроенный в Python модуль ast . Оттуда вы сможете пройти AST, чтобы извлечь ваш ответ.

Пример

Учитывая целевой файл Python (test.py):

a = input("Hello: ")
b = "input()"
c = input("World: ")

В отдельном файле Python:

import ast
file = open('test.py', 'r')
tree = ast.parse(file.read())

function1 = tree.body[0].value.func  # the function that was called on line 1
print(function1.id == "input")  # true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...