You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则表达式提取函数名?新手技术求助

提取Python函数名的正则解决方案

嘿,我来帮你搞定这个提取函数名的问题!你原来的代码没成功,核心原因是正则表达式没专门捕获函数名的部分,反而把def、括号这些无关内容都匹配进去了,自然拿不到想要的结果。

问题分析

你写的正则r"\s*(def)\s+\([^\)]*\)\s*{?\s*",其实是在匹配从def开始到括号结束的整段内容,但完全没对中间的函数名做捕获,所以返回的都是包含def的片段,不是单独的函数名。

正确的实现方法

我们需要调整正则,用捕获组把函数名单独拎出来。Python的函数名规则是:必须以字母或下划线开头,后面可以跟字母、数字、下划线。结合这个规则,我们可以写出精准的正则:

import re

def extractName(s):
    function_names = []
    # 正则解释:匹配def开头,捕获符合命名规则的函数名,后面跟左括号
    regexp = re.compile(r'\s*def\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\(')
    for m in regexp.finditer(s):
        # group(1)就是捕获到的函数名,group(0)是整个匹配的字符串
        function_names.append(m.group(1))
    return function_names

测试验证

比如用你给的测试字符串:

test_str = "def myFunction(s): ...."
print(extractName(test_str))  # 输出: ['myFunction']

如果有多个函数定义,比如:

test_str = """
def func_one():
    pass
def func_two(a, b):
    return a + b
"""
print(extractName(test_str))  # 输出: ['func_one', 'func_two']

额外说明

  • 这个正则会忽略def前后的空格,适配不同的代码格式
  • 严格遵循Python函数命名规则,不会匹配不符合规范的名称
  • 如果你的代码里有嵌套函数、装饰器之类的复杂情况,可能需要进一步调整正则,但对于基础的函数定义完全够用

内容的提问来源于stack exchange,提问作者Flowerwhite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:01:14