问题求助SOS:我有一列登记较为混乱的产品及尺码的信息,想要将对应的款式与尺码分为N组对应关系,每两列为一组重新制表,有希望批量实现吗?
小编一开始也认为,这么混乱的数据,基本就别奢求能实现了,没有想到就用了一个正则表达式函数就搞定了,不禁感叹,正则真的挺强大。
如下图所示:
A列为混乱的商品信息。商品信息中包括但不限于:款式名称(有字母&数字格式、纯数字格式、字母&符号&数字格式)、颜色(汉字格式、符号&汉字格式)、尺码(尺码是大写字母,尺码范围是M~XXL)、以及一些位置不固定的其他字符(汉字、符号等)。
由于一个单元格中可能包含1~N组“款式”与“尺码”,所以我们想要重新提取并整理数据到新表。每两列为一组,分别是“款式”与“尺码”一一对应。这样横向布局分成N组。
正则表达式的英文是“regular sets”或“regular expressions”这两个术语。
“regular”是有“规则的、有规律的”意思。正则表达式就是用于描述字符串的规则和模式,通过特定的语法和符号来匹配符合某种规律的字符串。
虽然上面的数据很乱,但总体上来说:
都是“任意字符”+款式1+“任意字符”+尺码1+“任意字符”+款式2+“任意字符”+尺码2+“任意字符”,这样的模式构成。
并且款式与尺码的格式也比较固定,可能性不会出现的太多。
那么我们就利用这两点来构建正则表达式。
第一步:提取款式名称
输入REGEXP正则表达式函数:
=REGEXP(A2,"[A-z]+\d+-\d+")
第一种款式名格式为:字母+数字+“-”+数字 格式。那么我们即构建这种模式的正则表达式。
[A-z]+:表示一个或多个任意的字母
\d+:表示一个或多个任意的数字
[A-z]+\d+-\d+:整体表示任意的 “字母+数字+“-””+数字 这种格式。
继续完善正则表达式:
=REGEXP(A2,"([A-z]+\d+-\d+)|[A-z]+\d+")
第二种款式名格式为:字母+数字 格式。那么我们即构建这种模式的正则表达式。
[A-z]+\d+:表示任意的 字母+数字 的组合。
第一种格式的款式名正则式用“()”括起来,代表一个分组,可以确保不与后面正则式产生混乱。
用正则“或”逻辑符号“|”与第一种款式名格式连接,表示两种格式是“或”的关系,同时存在且提取。
继续完善正则表达式:
=REGEXP(A2,"([A-z]+\d+-\d+)|([A-z]+\d+)|\d+")
第三种款式名格式为:纯数字 格式。那么我们即构建这种模式的正则表达式。
\d+:表示任意的一个或多个数字,代表 纯数字 格式。
第二种格式的款式名正则式用“()”括起来,代表一个分组,可以确保不与后面正则式产生混乱。
用正则“或”逻辑符号“|”与第二种款式名格式连接,表示三种格式是“或”的关系,同时存在且提取。
这样我们发现:
所有的 款式名 就都提取到了。
第二步:提取尺码
继续完善正则表达式函数:
=REGEXP(A2,"([A-z]+\d+-\d+)|([A-z]+\d+)|(\d+)|M|L|XL|XXL")
上一步 提取 款式名 格式的“纯数字”部分要用“()”括起来分组,确保不与后面的正则式产生混乱。
文章开始提干中已经明确了,尺码是M~XXL中的任意一种。
M|L|XL|XXL:表示M或L或XL或XXL中的任意一个元素。
再用逻辑符“|”:将“款式名”部分与“尺码”部分连接。可以确保分别提取“款式名”与“尺码”,且可实现 款式&尺码 分多组依次提取的效果。