Python实现:判断库存元素是否匹配含可变数字的模板
解决方案
这里提供两种实用的实现方式,直接解决你的匹配需求:
方法一:正则替换匹配模板
先把库存项里括号内的数字替换成{},再检查是否存在于模板列表中:
import re templates = ["Hat({})A", "Tie({})B", "Disk({})C"] inventory = ["Hat(1)A", "Hat(43)A", "Shirt(23)E", "Tie(2)B"] # 定义正则:匹配括号内的数字部分 num_pattern = re.compile(r'\(\d+\)') result = [] for item in inventory: # 把括号内数字替换成{},得到模板格式的字符串 normalized = num_pattern.sub('({})', item) # 检查是否在模板列表里 result.append(normalized in templates) print(result) # 输出: [True, True, False, True]
方法二:预编译正则模板匹配
把模板转换成正则表达式(将{}替换成匹配任意数字的\d+),然后用正则匹配库存项:
import re templates = ["Hat({})A", "Tie({})B", "Disk({})C"] inventory = ["Hat(1)A", "Hat(43)A", "Shirt(23)E", "Tie(2)B"] # 把模板转换成正则表达式列表 regex_templates = [re.compile(tmpl.replace('{}', r'\d+')) for tmpl in templates] result = [] for item in inventory: # 检查是否匹配任意一个正则模板 match = any(pattern.fullmatch(item) for pattern in regex_templates) result.append(match) print(result) # 输出: [True, True, False, True]
说明
- 方法一适合模板较少、库存项结构简单的场景,逻辑直观易理解。
- 方法二适合需要频繁匹配的场景,预编译正则后匹配效率更高,还能避免字符串替换可能带来的边界问题。
内容的提问来源于stack exchange,提问作者BobbyGIS
相关产品推荐
相关产品推荐

