如何分别匹配多个多行python函数定义
我一直在努力写一个正则表达式,可以匹配我想要的 我希望能够解析整个python源文件,并为该文件获取所有函数定义的列表 我编写了一些要解析的示例文本,试图考虑python函数def中可能存在的各种复杂性:如何分别匹配多个多行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
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标志,则该标志将匹配包括换行符在内的任何字符
regex=r"def (?P<name>\w+)\(.*?\)"
re.findall(regex, sample_text, re.DOTALL)
#['New_function_withSomestuff10', 'stuff', 'New_function_withSomestuff11']