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

如何修改Python3 re正则规则匹配所有factorial函数调用?

正则匹配所有factorial函数调用的修改方案

原正则失效原因

  • 开头的{ 固定前缀匹配+.*贪婪模式会从第一个左大括号加空格的位置开始,吞掉所有后续字符,仅保留最后一处符合factorial\s*\(.*\)规则的片段,所以只能拿到最后一个匹配结果
  • 括号内的.*贪婪匹配也可能出现跨括号匹配的异常

修改方案

基础方案(匹配所有factorial(xxx)格式片段)

直接使用无分组的正则匹配整段目标内容,findall会直接返回所有符合要求的完整匹配:

import re
s = '''double factorial ( double n ) { if ( n == 0 ) { return 1 ; } if ( n == 1 ) {     return factorial(n - 2 + 1) ; } return n * factorial ( n - 1 ) ; }'''
l = re.findall(r'factorial\s*\([^)]*\)', s)
# 如需排除开头的函数定义片段,切片即可
l = l[1:]
print(l)
# 输出结果:['factorial(n - 2 + 1)', 'factorial ( n - 1 )']

正则逻辑说明:

  • factorial 精确匹配函数名
  • \s* 兼容函数名和左括号之间的任意数量空格
  • [^)]* 匹配所有非右括号的字符,避免贪婪匹配越界
  • \) 匹配右括号闭合

优化方案(直接排除函数定义,仅匹配调用)

增加负向后行断言,过滤掉前面带返回值类型double 的函数定义场景,无需后续切片处理:

l = re.findall(r'(?<!double )factorial\s*\([^)]*\)', s)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:45:02