当前位置: 首页 > news >正文

WPS增加正则处理函数,简直如虎添翼

在2020年时,我在《自加载宏让你的Excel支持正则处理函数》一文中演示了给office的Excel增加正则处理函数,文本处理瞬间变得记得简单。VBA的宏要在WPS中使用,也只需要安装wps对应的vba库即可,上面的文章中有下载链接。

上一篇我也演示了一个js宏的小案例《WPS JS宏示例-批量添加链接》,今天我将使用JS宏开发正则处理函数,方便只安装WPS的电脑上使用。

JS宏开发正则处理函数

正则表达式的参考资料:

小小明 Python正则表达式速查表与实操手册
https://xxmdmst.blog.csdn.net/article/details/112691043

JS宏API文档直达页面:https://qn.cache.wpscdn.cn/encs/doc/office_v19/index.htm

新建Excel,打开开发工具->wps宏编辑器,编写如下代码:

function readValue(target){
    return typeof(target)=="string"?target:target.Item(1).Value2
}
//正则替换
function re_replace(text,pattern,repl){
	text=readValue(text),pattern=readValue(pattern),repl=readValue(repl);
	let regexp = new RegExp(pattern,"g");
	return text.replace(regexp, repl);
}
//正则查找
function re_findall(text, pattern){
	text=readValue(text),pattern=readValue(pattern);
	let regexp = new RegExp(pattern,"g");
	let result=[];
	while(a=regexp.exec(text)){
		result.push(a[0])
	}
	return result;
}
//正则抽取
function re_draw(text, pattern){
	text=readValue(text),pattern=readValue(pattern);
	let regexp = new RegExp(pattern,"g");
	let arr=regexp.exec(text);
	arr.shift();
	return arr.map(v=>v||"");
}
//正则判断,搜索是否包含指定的模式字符串
function re_test(text, pattern){
	text=readValue(text),pattern=readValue(pattern);
	let regexp = new RegExp(pattern,"g");
	return regexp.test(text);
}
//正则切割
function re_split(text, pattern){
	text=readValue(text),pattern=readValue(pattern);
	let rule = new RegExp(pattern,"g");
	return text.split(rule);
}

相对于vba而言,JS宏开发正则函数实在是过于简单。因此,相对之前的vba代码而言,我们还增加了正则匹配判断和正则切割的实现。

保存Excel文件为re.xlam,即自加载的宏文件。将其放到C:\Users\{userName}\AppData\Roaming\Microsoft\Excel\XLSTART\

注意:{userName}表示你当前的用户名。

image-20220928193355614

我个人是将之前的vba宏和现在写的js宏都保存到了这个文件里:

image-20220928202155021

对于WPS而已,Excel宏放在上述目录下能自动加载需要开启WPS的office兼容模式。在开始菜单的配置工具中:

image-20220928193819866

个人开启的对2007的兼容模式,应该对2010的兼容模式也是该目录。

若不想开启兼容模式还可以通过everything搜索XLSTART获取其他的加载项目录,将文件放到其中。例如,我搜索到C:\Users\ASUS\AppData\Roaming\kingsoft\wps\XLSTART

JS正则函数测试

对于之前已经测试过的正则,这次也全部测试通过。

正则抽取:

=re_draw(A1,"([^|(]+)(?:\(共(\d+)层\))?(?:\|(\d{4})年建\|)?(\d室\d厅)\|([\d.]+)平米\|([东南西北]+)")
=re_draw(A1,"(.+?)(\d+)")

注意:对于数组公式(Ctrl+shift+Enter),WPS无法直接拖动填充柄。需要复制公式后,选中要填充的区域,再以公式形式选择性粘贴。

image-20220928194927594

先复制数组公式,再直接在剩余区域粘贴也行,直接粘贴后也可以切换到纯公式的形式。

image-20220928200147999

正则搜索:

=re_findall(A1,"[\u4e00-\u9fa5]+|^\w+$")
=re_findall(A1,"[-_\d]+")

image-20220928200202738

image-20220928200302291

正则替换:

=re_replace(A1,"[A-Z0-9_\-]+|\(.*\)", "")

image-20220928200321404

下面我们测试一下正则匹配测试,需求是判断一组地址字符串中是否包含指定的关键字(任意一个都行):

=re_test(A1,"(?:葵涌|港岛|元朗|沙咀)")

image-20220928195716856

某些情况下使用正则切割进行分列会很方便,例如字符串的分隔符是长度不确定的空白字符:

=re_split(A1,"\s+")

image-20220928200638258

相关文章:

  • opencloudos容器镜像优化
  • 二.go语言条件与循环
  • 高阶函数1
  • 电子信息考研择校
  • 互联网数据管理平台
  • 本科行政管理毕业论文什么题目好写点?
  • kmp の 笔记
  • 最新网站证书提示风险的原因和几个解决方法
  • lambda表达式(C++11)
  • java计算机毕业设计图书共享系统源代码+数据库+系统+lw文档
  • 用Python生成Hilbert矩阵
  • 云计算与云原生
  • JBoss安装并部署war包
  • VGG论文
  • Tableau1——条形图和直方图
  • [数据结构]链表的实现在PHP中
  • 【EOS】Cleos基础
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 11111111
  • CSS居中完全指南——构建CSS居中决策树
  • C学习-枚举(九)
  • Gradle 5.0 正式版发布
  • HTTP那些事
  • JavaScript类型识别
  • Js基础知识(一) - 变量
  • k8s 面向应用开发者的基础命令
  • Spring Boot MyBatis配置多种数据库
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 闭包--闭包之tab栏切换(四)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端之React实战:创建跨平台的项目架构
  • 设计模式 开闭原则
  • 深度解析利用ES6进行Promise封装总结
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微信小程序填坑清单
  • 赢得Docker挑战最佳实践
  • 原生Ajax
  • 栈实现走出迷宫(C++)
  • ​linux启动进程的方式
  • #控制台大学课堂点名问题_课堂随机点名
  • (solr系列:一)使用tomcat部署solr服务
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (六)c52学习之旅-独立按键
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (转)Mysql的优化设置
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .md即markdown文件的基本常用编写语法
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net core控制台应用程序初识
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Project Open Day(2011.11.13)