ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBScript正则表达式用于搜索替换的若干练习

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-12-18 14:53 | 显示全部楼层 |阅读模式
有时,要进行某些特殊的查找替换,用word实现比较麻烦,用正则表达式进行会比较方便 '建立一个通用的替换函数 '参数sourceStr为源文本,partrn为欲查找的文本,replStr为欲替换的文本 Function ReplaceStr(sourStr, patrn, replStr) Dim regEx As Object ' 建立变量 Set regEx = CreateObject("vbScript.RegExp") ' 建立正则表达式 regEx.Pattern = patrn ' 要找的字符串 regEx.Global = True '全程查找(若非全程查找则只进行一次匹配) regEx.IgnoreCase = True ' 设置是否区分大小写 ReplaceStr = regEx.Replace(sourStr, replStr) ' 替换 End Function ' 替换的示例代码 Sub Example() Dim sourceText As String '删除重复的字(连续出现) sourceText = "我我们学习,他们们工作" MsgBox ReplaceStr(sourceText, "(.)\1", "$1"), Title:=sourceText '删除2个字以上的重复词 sourceText = "文坛文坛新人认真认真学习,勤勤恳恳勤勤恳恳努力工作" MsgBox ReplaceStr(sourceText, "(.{2,})\1", "$1"), Title:=sourceText End Sub
[此贴子已经被作者于2005-12-18 15:31:31编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-12-18 15:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

稍微解释一下:

1、要查找的内容:"(.)\1"
含义:
“.”表示任何非打印单个字符(不包括换行符\n)
“(.)”加括号表示一个表达式,对匹配的表达式(文本)保存到临时缓冲区,供后面使用
“(.)\1”这里的\1类似Word,对前面的第1个表达式进行引用,意思是说前面的表达式所匹配的文本重复出现
在后面的替换表达式中,$1表示引用第1个匹配的文本

2、要查找的内容:"(.{2,})\1"
含义:跟前面相仿,在括号表达式中增加了{2,},表示匹配2次以上。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-12-18 15:42 | 显示全部楼层
练习的内容在Word中也可以实现,这里只是作为对正则表达式的一个练习而已。 不过,我发现,在Word的查找框中,有些字符好像是查找不到的,比如在表格中的单元格如果只有一行内容,则它后面的换行符,并不是chr(10) & chr(13),而是chr(7) & chr(13),在查找框中如果欲查找chr(7)却查找不到。用vbScript的正则表达式却可以查找到。真是好奇怪?象这个贴子http://club.excelhome.net/dispbbs.asp?boardID=23&ID=140441&page=1,如果可以查找chr(7)的话,问题的解决就会简单一些。 刚才又反复看了Word的查找帮助,发现在查找框中,也可以使用\1这样的引用,从整个使用通配符的情况来看,Word已经把vbScript的正则表达式融入其中,毕竟vbScript和Word同是微软的产品。
[此贴子已经被作者于2005-12-18 15:58:51编辑过]

TA的精华主题

TA的得分主题

发表于 2007-8-23 22:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-11-8 17:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-2-3 16:17 | 显示全部楼层

据守柔版主测试,用正则查找是非常快的,但通常不只是进行查找,而是要进行查找并替换。如果将LZ的

sourceText = "……"  改为下面一句(即为打开的活动文档的文本内容):

sourceText = ActiveDocument.Content.Text

如将下面文本中的“狐狸”均替换为“Fox”,那又该怎么办?

那只敏捷的棕毛狐狸跃过那只懒狗。  那只敏捷的棕毛狐狸跃过那只懒狗。  那只敏捷的棕毛狐狸跃过那只懒狗。  那只敏捷的棕毛狐狸跃过那只懒狗。  那只敏捷的棕毛狐狸跃过那只懒狗。

不是要求弹出信息框,而是在Word文档中进行替换,即让上面的文本变成:

那只敏捷的棕毛Fox跃过那只懒狗。  那只敏捷的棕毛Fox跃过那只懒狗。  那只敏捷的棕毛Fox跃过那只懒狗。  那只敏捷的棕毛Fox跃过那只懒狗。  那只敏捷的棕毛Fox跃过那只懒狗。

因为正则替换能进行极为复杂的替换,如果Word中能简单快速运行,将是非常好的。

TA的精华主题

TA的得分主题

发表于 2008-2-3 18:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-4-20 16:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-12-10 09:07 | 显示全部楼层
不错啊,终于知道Word中使用正则式的方法了。

TA的精华主题

TA的得分主题

发表于 2011-9-25 22:06 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 23:57 , Processed in 0.037930 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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