Как я могу получить вызовы функций C с подчеркиванием, используя регулярное выражение в Python? - PullRequest
0 голосов
/ 21 мая 2018

Я пишу скрипт на Python для разбора вызовов функций C в определении функции.Имя функции может содержать одно или несколько символов подчеркивания.Ниже приведен пример кода: -

import re

line = "int main(){\n    func();\n    func_1();\n    func_call();\n}"

p = re.compile('\n\s*([a-zA-Z][a-zA-Z0-9_]*)\(', re.MULTILINE)
print "Regex 1:-\t{}".format(re.findall(p, line))

p = re.compile('\n\s*(\w+)\(', re.MULTILINE)
print "Regex 2:-\t{}".format(re.findall(p, line))

Вывод: -

Regex 1:-   ['func', 'func_1']
Regex 2:-   ['func', 'func_1']

Видимо, оба регулярных выражения могут получить вызов функции "func_call".Почему оба регулярных выражения не могут захватить "func_call ()"?Как мне изменить регулярное выражение так, чтобы оно анализировало "func_call ()"?

1 Ответ

0 голосов
/ 21 мая 2018

Это происходит потому, что, по-видимому, tutorialspoint.com удаляет call( из вашего исходного кода, прежде чем он даже запустится.

Если вы измените свой код на

line = "int main(){\n    func();\n    func_1();\n    func_call();\n}"
print "[" + line + "]"

Вы можете увидетьвывод

$python main.py
[int main(){
    func();
    func_1();
    func_);
}]

Еще лучше / хуже, вы можете сделать это :

call(
prcall(int "Hello, call(world!"call(

Он выведет Hello, world!, как если бы код был

print "Hello, world!"

все время.

Если вы измените имя в исходном коде на func_cxall, оно также будет работать.Удаляется только конкретная последовательность из пяти символов call(.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...