ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2020-10-28 11:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:文本处理和正则
留足迹学习!!

TA的精华主题

TA的得分主题

发表于 2020-11-23 17:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liu-aguang 发表于 2014-6-19 17:36
感谢guojianlin1985朋友做了大量的排版工作,使文档更易阅读.坦率地说本人对word的驾驭能力很弱,以致原文 ...

感谢楼主的无私分享,学习了

TA的精华主题

TA的得分主题

发表于 2020-12-4 21:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
renkangjizhen 发表于 2020-9-15 05:04
请问老师:中文的间隔号(词牌名后面的圆点)在正则表达式怎么表示?

\xB7,  直接用Unicode编码来表示就行.

TA的精华主题

TA的得分主题

发表于 2020-12-6 19:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-6 19:28 | 显示全部楼层
本帖最后由 liu-aguang 于 2014-6-17 16:38 编辑


   (九)元字符字面字符表示法:转义符”\”
   正则表达式用了一部分字符作为元字符,那么怎样在正则表达式中表示这些元字符的字面字符呢?它提供了一个称为转义元字符,即反斜杠来表示.例:表示字面点号可用”\.”;表示反斜杠的字面字符,用”\\”表示.下面列举了如果匹配字面字符必须转义的元字符:










提示:
     1.注意并没有包括”]”,”-“,和”}”;
     2.普通字符组[…]内部,元字符的转义有自己的规则,在下一章专门介绍.
  例:正则表达式:
    \d\.\d
  可以匹配0.2,3.1….等小数.

(十)引用前面括号捕获的文本--反向引用  
  正则中,用形如\1,\2…的元字符序列表示前面捕获性括号内的字串(块),”\1”叫反向引用.如:
     (abc)\1
  可以匹配目标文本:abcabc,这里\1实际引用的是它左边括号中的内容”abc”.
          (abc)(defg)\2
  可以匹配目标文本:abcdefgdefg ,这里\2指的是从左至右第二个括号中的内容.
  实例:删除一段英文中重复的单词.
  目标文本:This this Is is an example.
  结果文本:this is an example
         正则表达式:
     (\w+)\s+\1
  代码:
Sub testrep()
    Dim reg, s$
    s = "This this is Is an exmapl"
    Set reg =CreateObject("vbscript.regexp")
    reg.Pattern = "(\w+)\s+\1"
    reg.Global = True
    reg.IgnoreCase = True
    s = reg.Replace(s, "$1")
    MsgBox s
End Sub
讨论:
  正则表达式中,”\w+”表示匹配连续出现的单词字符.在本例中,它会匹配至空格为止;”\s+”匹配一个或多个空格; “\1”它会匹配左边第一个出现的括号中的相同内容.所以,该正则会匹配诸如”1 1” “1111    1111”之类的文本.
  代码中Global属性设置为True,表示搜索所有匹配;IgnoreCase属性设置为True,表示忽略大小写,如”this” 与”THIS”视为同一单词.
  代码使用了正则对象的Repalce方法,用$1替换找到的匹配. 这个例中,共找到两个匹配”This this”与”Is is”;而$1在前面已经说过它保存的是第一个捕获性括号内的内容.在本例中分别是This与Is.最终通过替换实现了删除重复单词的目的.
  在VBA中使用反向引用要注意:
  1.    是表示八进制转义的字符还是反向引用?
  细心朋友已经发现,反向引用与字符的八制转义表示法,其结构是一样的.那么怎样区分它们呢?其规则是:
  “\num”:假如num是一个可以看作八进制的数字.
     如果num的值大于正则左前边捕获性括号个数,那么,它是一个八进制转义符;
  如果num的值小于或等于正则左前边捕获性括号个数,那么,它是一个反向引用;
  显然,如果它左前边没有捕获性括号,那么,它肯定是一个八进制转义符了.如果num数字中含有超过8,或9的数字,那么,它一定是反向引用.
  2.    \1,\2,…编号是根据前面”左半圆括号”从左至右出现的顺序确定的.

TA的精华主题

TA的得分主题

发表于 2020-12-7 09:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-7 16:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-8 14:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-12-21 16:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2014-6-11 11:13
如果知道一点英文,理解记忆会更快。

\w

谢谢,谢谢你的总结,我们理解更容易了。

TA的精华主题

TA的得分主题

发表于 2020-12-25 16:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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