Excel本身没有正则表达式函数,这里用 WPS自定义函数的功能来实现。
自定义函数,保存加载宏
查看Excel顶部菜单有没有 开发工具
选项卡。有,则跳过,直接操作第2步,若无,则从第1步开始操作。
- 点击
文件
-选项
-自定义功能区
-从下列位置选择命令(C):
选择主选项卡
- 在方框中选择工具
-开发工具
- 点击中间添加(A)>>
按钮,把左边方框的条目,添加到右边。 开发工具
-查看代码
-粘贴代码
-保存文件
- 另存为Excel 加载宏(*.xlam)
//正则表达式匹配函数
//单元格引用函数方法 =RegExpMatch(字符串(必选), 表达式(必选), 索引(可选), 连接符(可选))
function RegExpMatch(text, pattern, index = 0, joint) {
//单元格引用函数的时候,参数可能返回的是单元格,需要从单元格提取值
if (typeof (text) == 'function') text = text.Value2
if (typeof (pattern) == 'function') pattern = pattern.Value2
if (typeof (index) == 'function') index = index.Value2
if (typeof (joint) == 'function') joint = joint.Value2
let i = pattern.lastIndexOf('/') //返回/字符最后的索引
, e = pattern.slice(1, i) //提取表达式
, m = pattern.slice(i + 1) //提取修饰符
, re = new RegExp(e, m) //创建正则对象
if (re.test(text)) {
let mch = text.match(re)
if (joint) return mch.join(joint)
if (index >= mch.length) return '超出索引范围[0, ' + (mch.length - 1) + ']'
return mch[index]
} else {
return '无匹配'
}
}
//正则表达式替换函数
//单元格引用函数方法 =RegExpReplace(字符串(必选), 表达式(必选), 替换的文本(必选))
function RegExpReplace(text, pattern, replaced) {
if (typeof (text) == 'function') text = text.Value2
if (typeof (pattern) == 'function') pattern = pattern.Value2
if (typeof (replaced) == 'function') replaced = replaced.Value2
let i = pattern.lastIndexOf('/') //返回/字符最后的索引
, e = pattern.slice(1, i) //提取表达式
, m = pattern.slice(i + 1) //提取修饰符
, re = RegExp(e, m) //创建正则表达式对象
return text.replace(re, replaced)
}
选择加载项
开发工具
- 加载项
- 浏览
- 选择加载宏
函数使用
RegExpMatch函数,提取匹配到的字符
RegExpMatch(字符串(必选),匹配模式(必选),索引(可选),连接字符(可选))
# 匹配模式
必选。和js正则表达式语法一样:/模式/修饰符,例全局匹配连续数字/\d+/g
全局匹配title并忽略大小写/title/gi
修饰符: g全局, i忽略大小写, m多行模式, s包括换行符
// 匹配最后一项带大写字母W的数据
RegExpMatch(A2,"/\d{3,4}W(?=[^W]+$)/")
A2单元格字符串:15555555555、13716888157、17766688888、16655、16677788786、18916888689
匹配模式:/(137|189|166)\d{8}/g
案例1:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",0,CHAR(10))
案例2:=RegExpMatch(A2,"/(137|189|166)\d{8}/g",2)
字符串:苹果1500斤,香蕉9万斤,火龙果300斤,橘子6万斤,柿子5万斤
匹配模式:/\d+[万斤]+/g
案例3:=RegExpReplace(A8,"/\d+[万斤]+/g","1000斤")
RegExpReplace函数,替换匹配到的字符
RegExpReplace(字符串(必选),匹配模式(必选),替换的文本(必选))
字符串:苹果1500斤,香蕉9万斤,火龙果300斤,橘子6万斤,柿子5万斤
匹配模式:/\d+[万斤]+/g
案例3:=RegExpReplace(A8,"/\d+[万斤]+/g","1000斤")