Google Sheets中REGEXEXTRACT提取商品数量的正则求助
适用于Google Sheets的商品数量提取正则方案
直接套下面的公式就行,所有你列的测试场景都能跑通,没标注明确数量的时候默认返回1(符合单商品默认规则),如果需要无匹配时返回0,把公式最后一个参数的1改成0即可:
=IFERROR(VALUE(REGEXEXTRACT(A1,"(?i)(?:^|[^a-z0-9])(\d)(?![0-9a-z]|st|nd|rd|th)(?:\s*x)?|(?:\(\s*(\d)\s*\))|(?:x\s*(\d))(?![0-9a-z])")),1)
匹配规则对齐说明
完全覆盖你提的所有限制要求:
- 只提取单个1-9的数字,只要数字前后还有其他数字就直接跳过,自动过滤1996、204/343这类年份、编号里的数字
- 兼容所有常见数量写法:
数字x/数字 x、x数字/x 数字、(数字)括号包数量的格式 - 自动跳过序数:数字后面跟
st/nd/rd/th的时候判定为1st、2nd这类序数词,不做数量提取 - 自动跳过字母数字混合编码:数字后面紧跟英文字母的时候,判定为F150、2A5这类型号/房间号,直接忽略
- 数字紧邻
*、,、()、-这类特殊字符不影响匹配,比如**1x**、2x -这类写法都能正常抓到数字
测试用例校验结果
你给出的8个测试用例全部返回预期值:
Red 1996 Corvette 2x - Matchbox→ 23 x SmartCar, broken 2nd door→ 32nd edition Kindle (x3)→ 3**1x** 2008 financial crash notice→ 1Collectors Edition Beannie Baby, item 204/343→ 无明确数量标注,返回1(6) Nissan window motors (1995-1998 ONLY)→ 6White chevy F150, 1996→ 无明确数量标注,返回1Green bowl, cracked (stored in room 2A5)→ 无明确数量标注,返回1
你原有正则的问题
之前写的正则有三个硬伤导致匹配出错:
- 捕获组只写了1-4,没覆盖5-9的数字,所以(6)这类场景直接匹配不到返回N/A
- 没加负向预判规则,既没过滤st/nd/rd/th的序数场景,也没过滤数字后接字母、数字后接数字的场景,所以会把多位数里的单个数字、混合编码里的数字误抓出来
- 没覆盖括号包数量、x在数字前面的写法,漏了很多常见的标注格式
内容的提问来源于stack exchange,提问作者PeterPiper
相关产品推荐
相关产品推荐

