如何用正则实现基于停用词的高校列表过滤?
可以用正则表达式实现这个需求
完全可以通过正则表达式实现你的要求——当用户搜索uni、univer、university或停用词the、of时,返回空结果。核心思路是先判断搜索词是否命中禁用模式,再决定是否执行原过滤逻辑。
实现步骤
- 编写正则匹配模式:覆盖所有需要拦截的搜索词,包括
university的前缀(uni、univer等)以及停用词the、of,且忽略大小写。 - 先检查搜索词是否匹配禁用模式:如果匹配,直接返回空列表;否则执行原有的过滤逻辑。
正则模式说明
^(uni(v(e(r(s(i(t(y)?)?)?)?)?)?|the|of)$
uni(v(e(r(s(i(t(y)?)?)?)?)?)?:匹配university的所有前缀(从uni到完整的university)the|of:匹配停用词本身^和$:确保是完全匹配,避免误拦截包含uni的其他无关词汇- 启用
re.IGNORECASE忽略大小写,兼容不同大小写的搜索词
修改后的代码
import re # 初始化时编译正则(避免重复编译提升性能) self.forbidden_pattern = re.compile(r'^(uni(v(e(r(s(i(t(y)?)?)?)?)?)?|the|of)$', re.IGNORECASE) # 过滤逻辑 def filter_schools(self, school): if self.forbidden_pattern.fullmatch(school): return [] # 原过滤逻辑 return [x for x in self.schools_list if school.lower() in x['name'].lower() or school.lower() in x['domains'][0].lower()]
简化版本(仅拦截指定词汇)
如果你只需要精准拦截uni、univer、university这三个具体词汇,而非所有前缀,可以简化正则为:
^(uni|univer|university|the|of)$
这样更简洁,完全匹配你提到的搜索场景。
内容的提问来源于stack exchange,提问作者Kjobber
相关产品推荐
相关产品推荐

