Как извлечь имя функции из Python Regex - PullRequest
0 голосов
/ 27 февраля 2019

Здравствуйте, я пытаюсь извлечь имя функции в Python, используя Regex, но я новичок в Python и, похоже, у меня ничего не работает.Например: если у меня есть строка «def myFunction (s): ....», я хочу просто вернуть myFunction

import re 
def extractName(s):
    string = []
    regexp = re.compile(r"\s*(def)\s+\([^\)]*\)\s*{?\s*")
    for m in regexp.finditer(s):
       string += [m.group()]
    return string

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Допущение: вам нужно имя myFunction из "... def myFunction (s): ..."

Я нахожу что-то в вашем регулярном выражении и в его структуре.

\s*(def)\s+\([^\)]*\)\s*{?\s*

Давайте посмотрим на это шаг за шагом:

  1. \s*: совпадение с нулем или большим количеством пробелов.
  2. (def): соответствует слову def.
  3. \s+: соответствует одному или нескольким пробелам.
  4. \([^\)]*\): соответствует сбалансированному ()
  5. \s*:соответствовать нулю или более пробелов.После этого в значительной степени не имеет значения, будете ли вы использовать только имя функции. Вы не соответствуете именно тому, что вы хотите из регулярного выражения .

Вы можете попробовать это регулярное выражение, если вы заинтересованы в этом с помощью регулярного выражения:

\s*(def)\s([a-zA-Z]*)\([a-zA-z]*\)

Теперь, как я структурировал регулярное выражение, вы получите def myFunction(s) в группе 0, def в группе 1 и myFunction в группе 2.Таким образом, вы можете использовать следующий код для получения результата:

import re
def extractName(s):
    string = ""
    regexp = re.compile(r"(def)\s([a-zA-Z]*)\([a-zA-z]*\)")
    for m in regexp.finditer(s):
        string += m.group(2)
    return string

Вы можете проверить свое регулярное выражение в реальном времени, зайдя на этот сайт .

Надеюсь, это поможет!

0 голосов
/ 27 февраля 2019

Если вам нужно только название функции, которую я предлагаю использовать inspect.Это работает для меня:

import inspect

def my_test():
    return inspect.stack()[0][3]

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