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

Python正则表达式实现指定函数名替换(避免误替换与重复替换)

精准替换表达式中的函数名

要解决你遇到的问题——只替换作为函数名的or/and/xor,不碰变量中的子串、也不重复替换已修改内容,用re.sub配合合适的正则就能一次搞定,不需要循环。

核心思路

用**单词边界\b**确保匹配的是独立的函数名:只有当or/and/xor是一个独立单词(前面不是字母、数字、下划线),且紧跟左括号(时,才进行替换。这样既不会误替换var_or这类变量里的or,也不会匹配已经替换后的func_or中的or(因为func_or里的or前面是下划线,属于单词字符,\b不会触发匹配)。

完整代码

import re

expression = "or(x) & and() | xor(and() & or())"
# 定义函数名替换映射
func_mapping = {
    "or": "func_or",
    "and": "func_and",
    "xor": "func_xor"
}
# 正则模式:匹配独立的函数名+左括号
pattern = re.compile(r"\b(or|and|xor)\(")
# 执行替换
processed_expr = pattern.sub(lambda match: f"{func_mapping[match.group(1)]}(", expression)

print(processed_expr)

输出结果

func_or(x) & func_and() | func_xor(func_and() & func_or())

说明

  • 正则\b(or|and|xor)\(中,\b是单词边界,确保匹配的函数名是独立的;(or|and|xor)是捕获组,用来提取要替换的函数名;\(匹配紧跟的左括号,避免误替换单独出现的or(比如变量名)。
  • 用lambda函数结合映射字典,能快速完成对应替换,逻辑清晰且易扩展(比如后续加新函数只需更新字典)。
  • 无需你原代码中的循环逻辑,因为这个正则可以一次性处理所有嵌套的函数名,不管层级多少都能正确匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:27:28