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

Python模块内使用re模块报错:NameError: name 're' is not defined

问题分析与解决

你遇到的NameError: name 're' is not defined错误,根源出在模块导入方式上,咱们一步步拆解清楚:

为什么会报错?

你的代码开头写的是:

from re import *

这种导入方式会把re模块里的所有公共成员(比如search、sub函数)直接导入当前命名空间,但不会把re这个模块对象本身导入。

而在build_match_and_apply_functions函数里,你调用的是:

return re.search(pattern, word)

这里试图通过re这个模块名来访问search函数,但因为你用了from re import *,当前命名空间里根本没有re这个名字,自然就会抛出NameError。

至于你说把import re放进pluralize函数内也无效,那是因为matches_rule函数的作用域问题——它是在build_match_and_apply_functions里定义的,不会继承pluralize函数内的re导入,所以还是找不到。

两种可行的修复方案

方案1:直接使用导入的函数(不依赖模块名)

既然已经用from re import *导入了所有成员,那直接调用search和sub即可,不用加re.前缀:

def build_match_and_apply_functions(pattern, search, replace):
    def matches_rule(word):
        return search(pattern, word)  # 去掉re.前缀
    def apply_rule(word):
        return sub(search, replace, word)  # 去掉re.前缀
    return (matches_rule, apply_rule)

方案2:改用标准的模块导入方式

更推荐这种方式,代码可读性更强,也不容易出现命名冲突:
把开头的from re import *改成:

import re

这样整个代码里的re.search和re.sub调用就都能正常工作了,不需要修改其他函数内的代码。

验证修复效果

修复后,运行你的测试代码:

import pluralizer
funcs = pluralizer.LazyRules()
p = pluralizer.pluralize("baby", funcs)
print(p)  # 会输出预期的"babies"

内容的提问来源于stack exchange,提问作者P. Prunesquallor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:40:51