Python正则表达式:提取含至少一位数字的产品型号
产品型号(货号)提取正则表达式优化方案
需求回顾
需要从产品名称中提取满足以下规则的型号/货号:
- 以行首或空格作为前缀,行尾或空格作为后缀
- 必须包含至少一位数字
- 允许的字符:大小写字母、数字、
.、-、/
问题分析
初始正则r'(^|\s)[A-Za-z0-9-./]+($|\s)'未实现「必须含至少一位数字」的校验;尝试的正则结构冗余,导致匹配结果不符合预期。
优化后的正则表达式
r'(?<=^|\s)[A-Za-z0-9-./]*\d[A-Za-z0-9-./]*(?=$|\s)'
正则解析
(?<=^|\s):正向零宽断言,确保匹配内容的前缀是行首或空格(不捕获空格,避免结果包含多余空格)[A-Za-z0-9-./]*:匹配0个或多个允许的字符(数字前的部分)\d:强制匹配至少一位数字,满足核心校验要求[A-Za-z0-9-./]*:匹配0个或多个允许的字符(数字后的部分)(?=$|\s):正向零宽断言,确保匹配内容的后缀是行尾或空格(不捕获空格)
示例验证
- 输入:
Odeon Light Foco 4722/4W Wall Lamp→ 输出:4722/4W - 输入:
Thermostat LUZAR LT0532 - Luzar art. LT0532→ 输出:LT0532(匹配到两个符合规则的结果,可根据业务需求选择取第一个或全部) - 输入:
Shock strut support in front of the right Febest FSS-TT9→ 输出:FSS-TT9
进阶优化(可选)
如果需要排除单独的数字(避免将产品名中独立的数字误判为型号),可使用以下正则:
r'(?<=^|\s)(?:[A-Za-z-./]+\d|\d[A-Za-z-./]+)[A-Za-z0-9-./]*(?=$|\s)'
该版本要求数字前后至少包含一个非数字的允许字符,进一步缩小匹配范围。
内容的提问来源于stack exchange,提问作者egor
相关产品推荐
相关产品推荐

