ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 学习正则表示式点滴

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-6-12 13:13 | 显示全部楼层 |阅读模式
学习方法:看的懂的帖子看一遍,看不懂的硬着头皮看一遍.顺手记录学习的点滴,以备后用.
http://club.excelhome.net/forum.php?mod=viewthread&tid=814821
提取带!的汉字
  1. Sub 检测源工作表名()

  2. Dim mystr, s1

  3. mystr = "=SUMIF(销售!$C$6:$C$60,'出口',销售!$AN$6:$AN$60)*基础数据表!$D$91"



  4. With CreateObject("VBSCRIPT.REGEXP")
  5.     .Global = True
  6.     .Pattern = "[\u4e00-\u9fa5]+(?=!)"
  7.     For Each ma In .Execute(mystr)
  8.        Debug.Print ma
  9.     Next

  10. End With

  11. End Sub
复制代码
(?=!)的意思呢,就是汉字必须带叹号的才提取,但本身不会被提取出来有个名称叫 正向预搜索

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-6-12 13:17 | 显示全部楼层
如果我想把找到符合正则表达式要求的工作表名称前加上'd:/[book1.xls]',replace 方法中又该如何用,谢谢!
  1. Dim mystr, s1
  2. mystr = "=SUMIF(销售!$C$6:$C$60,'出口',销售!$AN$6:$AN$60)*基础数据表!$D$91"
  3. With CreateObject("VBSCRIPT.REGEXP")
  4.     .Global = True
  5.     .Pattern = "([\u4e00-\u9fa5]+)(?=!)"
  6.     mystr = .Replace(mystr, "'d:/[book1.xls]'$1")
  7. End With
  8. Debug.Print mystr
复制代码
组的概念......

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-6-12 13:23 | 显示全部楼层
jiminyanyan 发表于 2012-6-12 13:17
如果我想把找到符合正则表达式要求的工作表名称前加上'd:/',replace 方法中又该如何用,谢谢!组的概念......

不能光看不练,马上来一段照猫画虎,检验学习效果
将   我爱!abddd我爱!      变成 我爱VBA!abddd我爱VBA!
我爱 !  这几个中间加入VBA...
  1. Sub test()
  2.     Dim mystr, s1

  3.     mystr = "我爱!abddd我爱!"

  4.     With CreateObject("VBSCRIPT.REGEXP")

  5.         .Global = True

  6.         .Pattern = "([\u4e00-\u9fa5]+)(?=!)"

  7.         mystr = .Replace(mystr, "$1VBA")

  8.     End With

  9.     Debug.Print mystr

  10. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-4 12:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
首先匹配出"男20",再将中文去掉剩下 "20"
  1. Private Sub a()
  2.     Dim Rep As Object
  3.     Set Rep = CreateObject("VBScript.RegExp")
  4.     With Rep
  5.         .Pattern = ".+(男|女)(\d{2}).+"
  6.        Range("A1") = .Replace("结婚个男20讲话稿结果结果", "$2")
  7.     End With
  8. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-4 13:01 | 显示全部楼层
结婚个男20aaaa讲话稿结果结果 查找讲话前文本的内容。
  1. Private Sub a()
  2.     Dim s, F
  3.     s = "结婚个男20aaaa讲话稿结果结果"
  4.     Dim Rep As Object
  5.     Set Rep = CreateObject("VBScript.RegExp")
  6.     With Rep
  7.         .Pattern = ".*(?=讲话)"
  8.         If .test(s) Then F = .Execute(s)(0)
  9.     End With
  10.     MsgBox F
  11. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-8-27 21:55 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-27 22:03 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-28 20:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我必须把普通电脑安装的自带EXCEL技术学会,才适合学正则与字典技术(老版主罗刚君的著作程序开发自学宝典有一些介绍)。但我觉得太难,既使常规技术内容也太多了,平时工作中用得也不是很多,比如,在数据菜单中进入,就有数据库之类的东西,全部没用过。平时工作基本是从系统导入数据、新建工作表、操作单元格之类,跨文件关联操作根本没有,用EXCEL技术也不能从系统中获取导出数据,这是被系统屏蔽的。所以,在VBA技术方面,我要加大力量,在数据搜索查找匹配方面多学点东西,因为我们平时上网或工作中操作系统,几乎无一例外,都是在搜索中录入数据、在录入数据的同时在执行搜索过程,最后动一动滚动条或方向键检阅结果是否吻合而已。

TA的精华主题

TA的得分主题

发表于 2018-8-28 20:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在我的试卷界面练习中,有多项选择题答案值用数值编码的项目,如答案ABCDE五个全选,即五个TRUE,编码为11111,答案为AC,即TRUE FALSE TRUE FALSE FALSE,编码为12122,等等,我是靠手工一个一个编的,我不知道如何用VBA程序对所有答案值组合进行循环编码,快速写入工作表单元格中,定义为名称,作VLOOKUP函数的数据源。因为如果答案选项多到十几个字母或以上,我用手工排列组合编不是眼珠子都要掉了吗?您能教教我吗?

TA的精华主题

TA的得分主题

发表于 2018-8-29 00:23 | 显示全部楼层
OKJSJSF 发表于 2018-8-28 20:53
在我的试卷界面练习中,有多项选择题答案值用数值编码的项目,如答案ABCDE五个全选,即五个TRUE,编码为111 ...
  1. Function getCode(ByVal s As String) As String
  2.     Dim i&, j$, a
  3.     a = Array("A", "B", "C", "D", "E")
  4.     For i = 0 To 4
  5.         If InStr(s, a(i)) Then j = j & "1" Else j = j & "2"
  6.     Next
  7.     getCode = j
  8. End Function
复制代码

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 13:57 , Processed in 0.024853 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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