ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 正则表达式 提取连续数字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-10-27 20:13 | 显示全部楼层
=LET(a,TEXTSPLIT(C  ONCAT(IFERROR(--MID(A2,ROW($1:99),1),";")),";"),FILTER(a,LEN(a)=5))

TA的精华主题

TA的得分主题

发表于 2023-10-27 22:25 | 显示全部楼层
image.png
image.png

把要捕获的数字做好分组,如上图:
括号2 和 括号3 都包含在 括号1里面,捕获的数字存放在特殊变量 $1 $2 $3,$2 存放首尾是数字的组合,$3 存放非数字首尾的组合,只需要读取 $3 变量就可以提取想要的结果

TA的精华主题

TA的得分主题

发表于 2023-10-28 20:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
DevilW 发表于 2023-10-27 22:25
把要捕获的数字做好分组,如上图:
括号2 和 括号3 都包含在 括号1里面,捕获的数字存放在特殊变量  ...

如果用正则的替换方法,在编写正则表达式时,尽量遵循一个原则:凡是必须以分组方式来匹配、但是却不需要保留的内容,都使用非捕获分组来表示;只有对需要保留的内容,才使用捕获分组。这样,可以使用目标内容明确,捕获到的就一定是目标字符,要予以保留,而未被捕获的字符就一定不是目标字符,无需保留。

另外,正则表达式要尽量符合“自然语言”所描述的本来意义。题主虽然只举了一个例子,但对问题描述还是很清楚的,再加上补充回复所述,可以清晰理解:一、目标字符本身,是5个连续的数字字符,需要用捕获分组来直接获取,就是(\d{5}),二、目标字符的其它限定条件:前后都不是数字。这个通常是用零宽断言来表示:后面非数字,用正向零宽断言, (?!\d) ;前面非数字,用逆向零宽断言(?<!\d) ,但VBScript.RegExp正则引擎并不支持逆向零宽断言的分组,所以需要改用等价的非捕获分组来处理,即:(?:\D|^)
把这三段按其本身之间的顺序关系相连,就是:(?:\D|^)(\d{5})(?!\d),再代入正则表达式“万能公式”的 .*?(eXp)|.+ 变量部分,最终就是:
.*?(?:\D|^)(\d{5})(?!\d)|.+

最后,用测试工具验证 一下上面所述正则表达式:
image.png

TA的精华主题

TA的得分主题

发表于 2023-10-28 21:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
DevilW 发表于 2023-10-27 22:25
把要捕获的数字做好分组,如上图:
括号2 和 括号3 都包含在 括号1里面,捕获的数字存放在特殊变量  ...

如果不习惯用零宽断言,那也可以按照正则表达式“万能公式”的第二种方式来编写:
(?:except|.*?)+(eXp|$)
其中,eXp仍是目标字符本身的表达式,本例中即\d{5},而except则是需要预先排除的内容,本例中,就是达到或超过6位的连续数字字符,即\d{6,}
综合起来,即:
(?:\d{6,}|.*?)+(\d{5}|$)

同样,用正则表达式测试工具来验证一下上述正则表达式:
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-10-28 21:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-28 21:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-28 21:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-28 22:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-10-28 23:13 | 显示全部楼层
附件.zip (18.14 KB, 下载次数: 20)

TA的精华主题

TA的得分主题

发表于 2023-10-30 17:09 | 显示全部楼层
ggmmlol 发表于 2023-10-28 21:12
如果不习惯用零宽断言,那也可以按照正则表达式“万能公式”的第二种方式来编写:
(?:except|.*?)+(eXp| ...

你这思路更好,前面我的审题思路理解是 \w+ 字符串中不能以数字同为首尾
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 08:42 , Processed in 0.035523 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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