如何用正则表达式提取函数定义行中的函数名?
提取函数名的正则表达式解决方案
需求与现有尝试
你需要从以下格式的代码行中提取函数名functionName:
returnType ClassType functionName(int param1, double param2)
returnType ClassType functionName();
已有非正则实现:
line.split("(")[0].split(" ")[-1]
尝试的正则代码(返回空值):
import re pattern = re.compile(r"\w+^\(")
问题分析
你写的正则r"\w+^\("存在两处逻辑错误:
^是行起始锚点,放在此处要求\w+必须出现在行开头,和实际文本结构不符- 未做分组提取,且匹配逻辑无法定位到目标函数名
正确正则方案
可以通过匹配左括号前的最后一个目标单词来提取函数名,以下是两种实现方式:
基础版正则
适配函数名与左括号直接相连的场景:
import re # 捕获左括号前的单词作为函数名 pattern = re.compile(r"(\w+)\(") # 使用示例 lines = [ "returnType ClassType functionName(int param1, double param2)", "returnType ClassType functionName();" ] for line in lines: match = pattern.search(line) if match: print(match.group(1)) # 输出:functionName
严谨版正则
兼容函数名与左括号之间有空格的场景(比如functionName ():
import re # 允许函数名和左括号之间存在空白字符 pattern = re.compile(r"(\w+)\s*\(")
正则解释
(\w+):捕获一个或多个字母、数字、下划线(符合常规函数名格式),这就是我们要提取的目标内容\s*:匹配0个或多个空白字符,兼容格式不规范的情况\(:匹配左括号,用来精准定位函数名的结束位置
内容的提问来源于stack exchange,提问作者turtle_in_mind
相关产品推荐
相关产品推荐

