EXCEL 使用正则表达式
本文参考:
https://blog.csdn.net/laoyebin/article/details/5377857(EXCEL里常用的几个正则表达式)
https://blog.csdn.net/catoop/article/details/70247105(Excel 正则表达式提取值)
- 今天一个朋友让我帮忙将一组 淘宝的宝贝标题里面提取出型号:
A | B | |
1 | 商品名称(比较典型的原始数据) |
型号(输出结果) |
2 | 美的(Midea) 电饭煲 智能IH加热 家用电饭锅 4L MB-FS4006 | MB-FS4006 |
3 | 美的(Midea) 多用途锅 4.5L 家用电火锅鸳鸯锅 1500W MC-WLHN32A | MC-WLHN32A |
4 | 美的(Midea) 电水壶HE1504a 家用便捷式烧水壶四段温304不锈钢电热水壶 | HE1504a |
5 | 美的(Midea)电热水瓶PF708c-50T双出水5段温控 家用5升电热水壶304不锈钢电水壶 | PF708c-50T |
6 | 美的(Midea)电压力锅 IH电磁加热可中途加菜钢胆5L高压锅 MY-HT5077P | MY-HT5077P |
7 | 美的(Midea) 破壁机 真空辅食机 智能家用多功能果汁机 榨汁机 MJ-BL1507A | MJ-BL1507A |
8 | 美的(Midea) 电磁炉 恒匀火 十档火力调节 一键桑拿蒸C21-QH2130(赠不锈钢蒸锅) | C21-QH2130 |
9 | 美的(Midea)电炖锅 煲汤锅 电砂锅 隔水炖 火山陶釜三胆 4L电炖盅 TGS40W | TGS40W |
10 | 美的(Midea)电热水壶即热式不锈钢电水壶 6段温控烧水壶 3L/3升台式饮水机MK-HE3001 | MK-HE3001 |
11 | 美的(Midea)电磁炉 纤薄匀火滑动触控 家用火锅炉 C21-RH2153火力时间双显示 | C21-RH2153 |
12 | 美的(Midea) 电磁炉HST2105 红外火力 不挑锅具 红外炉双环控火电陶炉 | HST2105 |
13 | 美的(Midea)电饭煲 2L智能IH加热 家用迷你智能预约触摸操控 小电饭锅MB-FZ2001 | MB-FZ2001 |
14 | 美的(Midea)电压力锅 球形内胆可作电饭煲 5L压力锅 家用双胆高压锅YL50Easy301 | YL50Easy301 |
15 | 美的(Midea)电饼铛MC-JK30Easy301家用煎烤机双面加热煎饼铛早餐机自动断电煎饼机 | MC-JK30Easy301 |
16 | 美的(Midea) 空气炸锅 家用全自动 高光耐热PP材料白色 MF-WZN3201空气无油炸锅 | MF-WZN3201 |
17 | 美的(Midea) 多用途锅 多功能家用电火锅 蒸锅 6L MC-LHN30C | MC-LHN30C |
18 | 美的(Midea) 电饭煲 3L家用智能预约 不锈钢拉丝机身电饭锅 MB-FS3073 | MB-FS3073 |
19 | 美的(Midea)电热水瓶 热水壶电水壶304不锈钢 电热水壶热水瓶MK-SP50Colour201 | MK-SP50Colour201 |
20 | 美的(Midea)多用途锅ZG26EASY401 食品级不锈钢 三层大容量电蒸锅 电蒸笼 | ZG26EASY401 |
- 从网友catoop的https://blog.csdn.net/catoop/article/details/70247105的文章中引用到如下VBA函数代码:
Function GetStr(rng As Range)
With CreateObject("VBscript.regexp")
.Global = True
.Pattern = "\d+\*\d+\+{0,1}\d{0,}" '表达式
If .Execute(rng).Count = 0 Then
GetStr = ""
Else
GetStr = .Execute(rng)(0)
End If
End With
End Function
- 因为我要测试表达式,所以需要在表格中不断的修改正则表达式,于是将上述代码稍加修改后得到:
(代码的用法就不敷述了)
Function GetStr(rng As Range, str As String)
'第一个参数rng为区域保持不变, 添加第二个参数str(作为正则表达式)With CreateObject("VBscript.regexp").Global = True.Pattern = str '表达式,直接从用户函数的第二个参数中调用If .Execute(rng).Count = 0 ThenGetStr = ""ElseGetStr = .Execute(rng)(0)End IfEnd With
End Function
下面介绍一下我所用的正则表达式以及思路:
- B1单元格中函数如下:
=getstr(A1,"((?!Midea)(?![0-9]{3,})[\w]{1,19}[-]{1}[\w]{1,19})|(?!Midea)(?![0-9]{3,})[0-9A-Z]{0,19}[-]{0,1}[0-9A-Z]{1}(\w{3,10})")
第二个参数的的内容为从‘ | ’这个符号分成两部分理解:
- ((?!Midea)(?![0-9]{3,})[\w]{1,19}[-]{1}[\w]{1,19})
其中:
(?!Midea) 表示不包含字符“Midea” 因为每一行里面都有这个
(?![0-9]{3,})表示不包含以3个及以上的数字组合的开头(故将其放置在前面),目的是为了排除第三行中的1500W
[\w]{1,19}数字及大小写字母1,19个长度的组合
[-]{1} 紧接着后面一定会有一个“-”减号
[\w]{1,19}最后数字及大小写字母1,19个长度的组合,之所以是19这个数只是为了能够包含住所有应该匹配到的型号
这样的结果就是所有带有“-”减号的型号 - (?!Midea)(?![0-9]{3,})[0-9A-Z]{0,19}[-]{0,1}[0-9A-Z]{1}(\w{3,10})"
这是“|”符号后面的部分,“|”表示“或”的意思,即前面的没有匹配到就用后面的匹配
前面的一样的就不重复介绍了,从不一样的开始介绍:
[0-9A-Z]{0,19}开头为数字或大写字母,且长度为0到19位字符的(因为是从0开始的,所以可以有也可以没有)
[-]{0,1}表示后面紧接零个或者1个“-”减号
[0-9A-Z]{1}前面两个有可能都没有,也就是说这里有可能是开头的字符,必须为大写字母或数字
(\w{3,10})最后的字符可以是大小写字母或数字,长度为3到10个字符
源文件下载:
https://download.csdn.net/download/qq_25846269/11159568
EXCEL 使用正则表达式相关推荐
- Excel用正则表达式提取出输入正确的身份证号
今天小编帮助客户整理了一堆省份证号,如下图所示,这里为了做演示输入了一些虚拟号,想要分享的是Excel用正则表达式提取出输入正确的身份证号 (方方格子插件) 1.先看动图演示吧 2.那我了对比我们可以 ...
- Excel用正则表达式统一删除文本下划线的操作
今天小编要和大家分享的是,Excel用正则表达式统一删除文本下划线的操作,如下图所示 (方方格子插件) 1.先看动图演示吧 2.开始之前我们首先选中文本. 3.然后选择方方格子按钮. 4.选择 ...
- excel使用正则表达式
excel文件格式: 需求:用正则表达式提取D列的***,写到E列中 步骤: 1.打开excel中的vb编辑器,点击"文件"--"选项"--"自定义功 ...
- EXCEL VBA 正则表达式
[2011-09-09:http://www.cnblogs.com/dxy1982/archive/2011/09/09/2159246.html] [2010-08-08:http://www.e ...
- Excel 使用正则表达式替换字符串
转自:http://www.pinlue.com/article/2019/03/2011/428277543311.html
- excel中用正则匹配_excel 利用正则表达式匹配工作表中的数据
excel 利用正则表达式匹配工作表中的数据 sheet1中A列放需要匹配的数据 sheet2中A列放正则表达式,可以是多个,但至少一个 匹配到了则在sheet1中C列对应行显示相关标记内容,比如本案 ...
- jvm如何实现隐藏_反映一个隐藏的jvm超级大国
jvm如何实现隐藏 告诉我更多有关反射的信息! (Tell me more about reflection!) Reflection is quite a powerful tool provide ...
- easy-excel导入
使用easy excel导入excel数据到系统 1.自定义校验注解 /*** <p>Excel导入Decimal类型校验</p>*/ @Target(ElementType. ...
- Part2_3 正则表达式、Excel表格相关操作
正则表达式常用操作符 #正则表达式:字符串模式(判断字符串是否符合一定的标准)import re#创建模式对象 pat = re.compile("AA") #此处的AA,是正则表 ...
最新文章
- MySQL基础篇:数据类型
- sqlserver的四种分页方式
- find命令的技巧和一些例子
- NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
- 展开收起功能实现_小房间不一定要拥挤,这样设计实现小户型的大气!
- 我的docker随笔7:docker容器与主机之间文件拷贝
- 李洪强iOS开发之Foundation框架—结构体
- 天玑800处理器支持鸿蒙系统吗,为何Redmi Note 9选择天玑800U处理器?和骁龙750G差距多大...
- 软件测试理论基础知识
- C#微信、支付宝扫码支付源码
- 类似igoogle div拖拽 demo
- 小熊派开发板STM32L431_BearPi_LiteOS_E53_ST1调测GPS+2G心得(附代码修正版)
- PHP地图规划骑行路径,规划结果 + 骑行路线绘制
- 如何修改植物大战僵尸文档
- 任何人都有值得学习的地方,横瓜向[水牛党](4618415)请教问题
- 重庆工商职业学院计算机专业在哪个校区,重庆工商职业学院地址在哪里
- go语言,实现彩云翻译API
- 知识图谱发展历程简介
- 厦门考计算机竞赛保送北大清华名单,厦门这所学校130人获清华北大等名校保送资格...
- java.sql.timestamp_java.sql.Date和java.sql.Timestamp转换