ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 458|回复: 11

[原创] 这些少为人知的正则表达式的元字符,你顶多会两个,第一个很有用

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-10-8 07:57 | 显示全部楼层 |阅读模式


正则表达式的元字符,网上介绍资料很多,但非常完整的并没看到【我整理的较完整的元字符作用的表格介绍下次在本公众与发文放出】。

比如题图中的 \H、\V 、\K、\G、\Q、\X除了前两个介绍资料略多,后面的,尤其是后三个,介绍资料少之又少。

今天龙逸凡就将自己学习的笔记整理出来,跟大家分享。错漏之处,请大家指正。





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)

元字符\K

注意:K是大写的

用于重置匹配的起始位置。具体来说,\K 会忽略它前面正则表达式所匹配的所有内容,也就是将前面正则表达式的匹配结果Kan砍掉,只要后面的。



案例1:提取应交税金的第三级科目

公式

=REGEXP(B1,"([一-龟]+-){2}\K[一-龟]+")


[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)




正则表达式"([一-龟]+-){2}"提取科目的前二级,然后用一把大砍刀\K将它砍掉。





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)




案例2:提取各收款方式的金额

公式:

=--IFNA(REGEXP($A2,B$1&"\K\d+"),)





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)




用\K的好处是不必费神费力地用(?<=表达式)去定位,用大砍刀\K砍掉前面不要的保留后面想要的,干净利落!

尤其是当正向后行断言需要使用不确定量词时【WPS和Excel正则表达式的正向后行断言不能使用不确定量词】,这时就是\K派上用场的时候。



案例3:提取英文名

比如要提取下图B列的英文名,不能使用正向后行断言(?<=.+? +\w+),这个时候就提起大砍刀\K,手起刀落,将前面的姓名拼音咔嚓掉。

公式:

=REGEXP(B3,"(.+? +\w+){1}\K.*")





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)







[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)

元字符\Q、\E

\Q 打开转义模式,

\E  关闭转义模式





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)









评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-8 07:57 | 显示全部楼层




[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)

转义字符\X

注意:X是大写的

基本知识:

a&#769;看起来是一个符号,实际上它是由两个 Unicode 代码点组成:

a(基本字符部分)

&#180;(重音符部分)

当我们用正则表达式对它们进行匹配时,它会就会显出原形


[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)








[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)




这个有点类似于以前写的文章,给数字汉字加圈

正因为有上面的情况存在,那如何将本字符及后面紧邻的变音符、重音符等组合符号视为一个整体进行匹配呢?

使用元字符\X





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)











[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)

如果没有重音符等组合字符,全是普通字符呢?

它会将后面紧邻的普通字符当作组合字符,和当前字符捏合在一起。





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)








[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)




一般情况下,这个元字符用不上,只需知道有这个元字符、它有这特殊作用就行了,需要时来本Excel偷懒的技术公众号查阅即可。





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)

转义符\G

这是一个锚点字符,用于匹配上一次匹配结束的位置,以确保匹配从上一次匹配结束的位置继续进行,也就是说一旦不满足,就停止匹配。

它在全局模式下使用。

比如下图B4单元格的公式,提取数字,三个数字一组,普通模式下,结果为四组数字。

如果想达到“不满足条件就停止匹配”的效果,就使用\G。

B5单元格的公式:

=REGEXP(B1,"\G\d{3}")





[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)








[backcolor=rgba(0, 0, 0, 0.1)]
[backcolor=rgba(0, 0, 0, 0.1)]






添加图片注释,不超过 140 字(可选)




转义符\h\v

\h 代表水平空白字符【空格、不间断空格和水平制表符】

\v 代表垂直空白字符【换行符、回车符、换页符、垂直制表符】

这个没什么好讲的。就不上案例了。

更多介绍正则表达式的文章,请点击阅读合集正则表达式

正则表达式的字符组,新手必踩的几个坑,你必须知道
5句话,让你的正则表达式水平突飞猛进!(第1-2句)
5句话,让你的正则表达式水平突飞猛进!(第3-5句)
掌握这一点,就能正确地写出正则表达式了
正则表达式练习题10道,自动判断结果


评分

8

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-10-8 16:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习啦,感谢分享

TA的精华主题

TA的得分主题

发表于 2024-10-8 21:45 | 显示全部楼层
本帖最后由 ww87725244 于 2024-10-8 21:46 编辑

感谢龙老师分享,留个脚印,细细品读
希望下一贴是正则的递归

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-8 23:09 | 显示全部楼层
ww87725244 发表于 2024-10-8 21:45
感谢龙老师分享,留个脚印,细细品读
希望下一贴是正则的递归

递归我还没学明白呢

TA的精华主题

TA的得分主题

发表于 2024-10-8 23:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-10-9 10:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-10-9 21:48 | 显示全部楼层
感谢龙逸凡大师的无私分享, 留下记号,需要时间去细品

TA的精华主题

TA的得分主题

发表于 2024-10-9 23:19 | 显示全部楼层
本帖最后由 edwin11891 于 2024-10-10 05:46 编辑

感谢分享

TA的精华主题

TA的得分主题

发表于 2024-11-3 17:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 23:40 , Processed in 0.045667 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表