ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 正则表达式入门与提高---VBA平台的正则学习参考资料

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-31 11:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:文本处理和正则
本帖最后由 ggmmlol 于 2019-12-31 11:34 编辑

表示浮点数,我通常用以下表达式,可以匹配正或负的整数、小数以及无整数字符的小数:

-?\d*\.?\d+

这个式子的处理效率也不高,优点是比较简短好记。

如果待处理的目标字符中并不会出现无整数位的小数,那还是以 -?\d+(\.\d+)? 为宜

TA的精华主题

TA的得分主题

发表于 2019-12-31 11:40 | 显示全部楼层
好东西啊,可以好好学习下,感谢楼主

TA的精华主题

TA的得分主题

发表于 2019-12-31 11:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ayin277974609 于 2019-12-31 12:12 编辑
liu-aguang 发表于 2019-12-31 08:45
原文本是用“|“分隔的,导入excel时选择自定义用”|“作分隔线,自然就分到了不同单元格。

主要是这个是经常性的操作所以我想着简化一下直接录制宏然后点击文件自动分列出来,在通过公式自动计算 ,然后那个分列的还需要手工纠正,而且只针对本次操作的文件,如果下一次有新的文件(文件格式都是这样的)还要用手工去操作分列

TA的精华主题

TA的得分主题

发表于 2020-2-7 10:56 | 显示全部楼层
本帖最后由 gbgbxgb 于 2020-2-7 17:56 编辑
liu-aguang 发表于 2014-6-14 11:03
二、匹配总原则
  说到原理,总让人觉得它该是若干条高度概括的结论.不幸的是对正则原理来说貌似任何概括都 ...

正则表达式:
Pattern="cat"
目标文本:
He captured a catfish for his cat

   结论:正则表达式”cat”,并不是匹配”单词cat”.它的本质意义是首先匹配一个字符”c”,紧接着一个字符”a”,再接着一个字符”t”的这样一个字符串.(你能用前面所学知识,只匹配目标文本的最后单词”cat”吗?)
+++++++++分界线+++++++++++++++++++++++

上述文字基本上引用自您51楼的描述。其中,您设置了一个题让阅读者自行完成(如后文所述)。我的疑问是您的本意是让阅读者写出如下的正则式1、正则式2或正则式3,还是再难点的类似正则式4的正则式:

你能用前面所学知识,只匹配目标文本的最后单词”cat”吗?
正则式1:
Pattern="\bcat$"
正则式2:
Pattern="\bcat\b"
正则式3(较土):
Pattern="\bcat\b$"
正则式4(紧扣您的“只匹配目标文本的最后单词‘cat’”的文字描述,譬如目标文本:He captured a catfish for his cat and the cat which is others.):
Pattern="\b(cat)\b(?!.*?\b\1\b)"

Pattern="\b(cat)\b(?!.*\b\1\b)"

顺带再写个只匹配倒数第2个“cat”的正则式,若存在不足,请您指正:
Pattern="\b(cat)\b(?!(.*?\b\1\b){2,})(?=.*?\b\1\b)"

Pattern="\b(cat)\b(?!(.*\b\1\b){2,})(?=.*\b\1\b)"

关于引用,即\1,经实践,发现其引用时不包括\b定界符,故把前述的正则式4写成如下形式是错误的,您能否给些见解:
Pattern="(\bcat\b)(?!.*?\1)"
所以,正确的写法必须写成前文那样或者写成无多大意义(极易产生误导)的这样:
Pattern="(\bcat\b)(?!.*?\b\1\b)"
结论:使用引用时必须注意该引用所引用的真正内容范围,而非想当然误写的正则式的表面形式内容,形如本跟帖所说的误写形式:(\bcat\b)。

TA的精华主题

TA的得分主题

发表于 2020-2-10 12:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-2-21 15:21 | 显示全部楼层
liu-aguang 发表于 2014-6-11 09:00
6.应用对象的方法代码段
      VBScirpt正则对象的方法共有三个:你可以根据任务要求选择使用一个或 ...

9楼提到正则“匹配字符串之前的文本”和“匹配字符串之后的文本”中的符号是什么?图片不知道怎样输入呢?

TA的精华主题

TA的得分主题

发表于 2020-2-25 11:33 | 显示全部楼层
本帖最后由 dingboy_VBA 于 2020-2-25 11:35 编辑

我对正则表达式的理解与掌握,就是从此贴开始的,我打印整理出来自己学习了很久,非常感谢作者的精心写作。

TA的精华主题

TA的得分主题

发表于 2020-2-25 12:24 | 显示全部楼层
非常感谢楼主的分享,认真学习中

TA的精华主题

TA的得分主题

发表于 2020-2-26 15:17 | 显示全部楼层
本帖最后由 丫丫呸 于 2020-2-26 21:06 编辑
VBA万岁 发表于 2015-5-20 12:14
疑惑:
31楼的最末一个示例中,如果将s改为:
s = "正则ABC非正则ABC不正则ABC"
  1. Sub test()
  2. Dim re, mh, s$
  3. s = "正则ABC非正则ABC不正则ABC"
  4. Set reg = CreateObject("vbscript.regexp")
  5. With reg
  6. .Pattern = "(?=\W+).{2}"
  7. .Global = True
  8. Set mh = .Execute(s)
  9. End With
  10. i = 10
  11. For Each k In mh
  12. Cells(i, 1) = k
  13. i = i + 1
  14. Next
  15. End Sub
复制代码

想请教一下:
1、按照你给的字符串 正则ABC非正则ABC不正则ABC ,我测试出来的结果 是
正则
非正
则A
不正
则A
这是为什么?

TA的精华主题

TA的得分主题

发表于 2020-3-4 16:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢楼主分享,学些了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 03:45 , Processed in 0.045494 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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