如何分别匹配多个多行python函数定义

如何分别匹配多个多行python函数定义,python,regex,Python,Regex,我一直在努力写一个正则表达式,可以匹配我想要的 我希望能够解析整个python源文件,并为该文件获取所有函数定义的列表 我编写了一些要解析的示例文本,试图考虑python函数def中可能存在的各种复杂性: def New_function_withSomestuff10(test: str, thing: str, third: float, last=a(10): int) -> str: test def st

我一直在努力写一个正则表达式,可以匹配我想要的

我希望能够解析整个python源文件,并为该文件获取所有函数定义的列表

我编写了一些要解析的示例文本,试图考虑python函数def中可能存在的各种复杂性:

def New_function_withSomestuff10(test: str, thing: str,
                                 third: float, last=a(10): int) -> str:
    test

def stuff(things):
    stuff

def New_function_withSomestuff11(test: str, thing: str,
                                 third: float, last: int) -> str:
    test
我有一个当前的正则表达式,似乎与这些很好的正则表达式相匹配,但它似乎与所有正则表达式都匹配:

regex = r'def (?P<name>\w*)\([\s\S]*\):[\s\S]*'

谁能帮我理解我做错了什么?我一直在尝试使用贪婪量词与懒惰量词、向前看/向后看以及其他类似的有用工具,但它们似乎都不能满足我的需要(或者,更可能的是,我只是使用了错误的量词)。

我希望下面的方法能有所帮助:

regex=r"def (?P<name>\w+)\(.*?\)"
re.findall(regex, sample_text, re.DOTALL)

#['New_function_withSomestuff10', 'stuff', 'New_function_withSomestuff11']

regex=r“def(?P\w+)\(.*?)
re.findall(正则表达式、示例文本、re.DOTALL)
#['New_function_with somestuff10'、'stuff'、'New_function_with somestuff11']
说明:

Regex:def(?p\w+)\(.*?\)

  • def按字面意思匹配字符def(区分大小写)
  • 命名捕获组名称(?P\w+)
    • \w匹配任何单词字符(等于[a-zA-Z0-9_])
    • +量词-在一次和无限次之间匹配,尽可能多地匹配,根据需要回馈(贪婪)
  • 与字符匹配(字面上区分大小写)
  • *?匹配任何字符
    • *量词-零次和无限次之间的匹配,尽可能少的匹配次数,根据需要扩展(惰性)
  • 匹配字符)逐字(区分大小写)
Flag:re.DOTALL

  • 如果指定了DOTALL标志,则该标志将匹配包括换行符在内的任何字符

除其他外,Python中的函数可以嵌套(函数中的函数),正则表达式不能匹配递归结构。只有没有参数的函数名?@DYZ我不关心递归结构,但当前的正则表达式会同时检测所有函数,而不是只检测第一个函数。“:”在正则表达式末尾附近,应该与第一个函数的结尾相匹配,与文件中最后一个函数的结尾相匹配。@RomanPerekhrest关于我想要从正则表达式中得到什么,是的,我只关心结尾的名称,但是我认为正则表达式也需要匹配任何可能的参数,以便正确地找到函数定义。您仍然必须平衡括号,这是一项递归任务。您好!虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
regex=r"def (?P<name>\w+)\(.*?\)"
re.findall(regex, sample_text, re.DOTALL)

#['New_function_withSomestuff10', 'stuff', 'New_function_withSomestuff11']