如何用正则仅移除SKU开头的两个字母字符,生成唯一SKU列表
问题:处理SKU生成唯一列表
客户的SKU里,开头两个字母用来标识型号变更/更新,我需要生成唯一的SKU列表用于Data Studio仪表盘。样本SKU如下:
NP9151BM01 NL9151BM01 NL6004SL01 NN6004SL01 NP1927YM05 NN1927YM05 NQ1296BM01 NG1296BM01 NQ1044YL04 NN1044YL04 NP9151YM05 9151YM05 1044YL04
需求很明确:只有当SKU开头是两个字母时,才移除这两个字符;如果开头不是两个字母(比如纯数字开头),就保持SKU原样。比如要把NP9151BM01和NL9151BM01处理成同一个SKU,9151YM05则直接保留。
之前找到的正则(?<=^..).*$会一刀切移除所有SKU的开头两个字符,不符合需求,得调整。
解决方案
正则替换方案
用这个正则匹配要移除的开头部分:
^[A-Za-z]{2}
把匹配到的内容替换成空字符串就行。
逻辑说明
^:锚定字符串开头,确保只检查最前面的字符[A-Za-z]{2}:精准匹配连续两个大小写字母,{2}限定了必须是两个字符
这样一来,只有开头是两个字母的SKU会被去掉前两位,其他情况完全保留原SKU。
实际效果验证
NP9151BM01→ 匹配NP,替换后得到9151BM01NL9151BM01→ 匹配NL,替换后得到9151BM01(和上面结果一致,实现去重)9151YM05→ 开头无两个字母,不匹配,保持原样1044YL04→ 同样不匹配,保留原SKU
捕获组提取方案(可选)
如果是用提取内容的方式而非替换,也可以用这个正则:
^(?:[A-Za-z]{2})?(.*)$
直接提取第一个捕获组的内容即可。这里(?:...)是非捕获组,?表示前面的两个字母是可选的,不管有没有,都能捕获到后面的所有内容。
内容的提问来源于stack exchange,提问作者Abhay
相关产品推荐
相关产品推荐

