ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]正则表达式与Word查找替换

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-3-9 11:29 | 显示全部楼层 |阅读模式

最近对正则表达式产生了浓厚的兴趣,其实远在前年,孔兄已给我一个秘籍,只是无心研习。

一入此门,方知天高地厚。

其实Word查找与替换本版讨论诸多,已入较高境界,静思之,Word的查找与替换来源于正则表达式对象,只是融入了RANGE对象的诸多属性。

正则表达式主要用于处理无格式文本,特别是大文档,优势非常明显。

以下代码包括了几乎所有的正则表达式的属性,大家可以同WORD Find对象进行比较,理解。

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2008-3-9 11:17:47
'仅测试于System: Windows NT Word: 11.0 Language: 2052
'№ 0357^The Code CopyIn [ThisDocument-ThisDocument]^'
'* -----------------------------
Option Explicit
Sub Example_REGEXP()
'引用MS VBSCRIPT REGULAR EXPRESSIONS 5.5
'适用于无格式文本的查找与替换
    Dim myREG_EXP As New RegExp, myString As String
    Dim Matches As Object, Matche As Variant, N As Integer
    Dim mySubMatches As Object
    myString = ActiveDocument.Content
    With myREG_EXP
        .Pattern = "([a-z])([^a-zA-Z ]+)([a-z])| " & Chr(13)
        '        .Pattern = "([a-z])([^a-zA-Z ]+)([a-z]|\s+)"
        ''''''''''''''''="([a-z])([^a-zA-Z ]{1,})([a-z]|\cM)"
        ''''''''''''''''="([a-z])([^a-zA-Z ]{1,})([a-z]|\x13)"
        ''''使用$1$2$3分别返回查找匹配项中的([a-z])、([^a-zA-Z ]+)和([a-z]| " & Chr(13) & ")",同WORD之\1\2\3
        .Global = True '全局搜索,相当于搜索全部,而非只是一次
        .IgnoreCase = True '不区分大小定,注意,没有全半角,如果为False ,则为区分大小写.
        '返回一个匹配项集合对象,是一个数组
        Set Matches = .Execute(myString)
        If Not Matches Is Nothing Then    '如果不为空数组
            For Each Matche In Matches
                N = N + 1
                Debug.Print "第" & N & "个匹配项 :" & Matche & "|位置:" & Matche.FirstIndex & "|长度:" & Matche.Length
                Set mySubMatches = Matche.SubMatches '返回匹配对象中的子匹配项对象(也是一个数组,下标为0,上标最大为8,即9个子项)
                Debug.Print mySubMatches(0) & "|" & mySubMatches(1) & "|" & mySubMatches(2)
            Next
        End If
        '进行替换
        myString = .Replace(myString, "$1" & Chr(13) & "$2" & Chr(13) & "$3")
    End With
    Me.Content.Text = myString '重写文档内容
    MsgBox "Microsoft RegExp共找到并替换了" & Matches.Count & "个匹配项!", vbInformation, "ExcelHome"
End Sub
'----------------------

正则表达式使用详解.doc文件见附件,再次感谢Konggs版主的提供。

KrlJiUmg.rar (28.53 KB, 下载次数: 2282)

相关链接:

http://club.excelhome.net/viewthread.php?tid=140856&replyID=&skin=0

http://club.excelhome.net/viewthread.php?tid=296524&replyID=1205569&skin=0

http://club.excelhome.net/viewthread.php?tid=302972&extra=&page=2

本例对照的Word查找与替换内容:

http://club.excelhome.net/viewthread.php?tid=111182&replyID=&skin=0


[此贴子已经被作者于2008-3-9 11:31:11编辑过]

TA的精华主题

TA的得分主题

发表于 2008-3-11 17:43 | 显示全部楼层
先收藏再学习。谢谢老大分享!

TA的精华主题

TA的得分主题

发表于 2008-5-8 21:47 | 显示全部楼层
老大客气了。对于纯文本,且很大时,正则表达式的效率非常高。

TA的精华主题

TA的得分主题

发表于 2008-5-10 22:47 | 显示全部楼层

这两天学用正则处理大文档,体验到其效率的惊人,Find和Replace很难处理的它居然轻松完成。

有一种感觉,好像当IgnoreCase 取值为False时的处理速度比为True时又要快很多,不知是否都是这样。

TA的精华主题

TA的得分主题

发表于 2008-6-12 08:39 | 显示全部楼层

 Debug.Print mySubMatches(0) & "|" & mySubMatches(1) & "|" & mySubMatches(2)

运行到这句有错误提示“无效的过程调用或参数”,百思不得其解,能解释一下吗?

TA的精华主题

TA的得分主题

发表于 2008-6-18 20:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-6-4 22:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-11-14 18:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-14 17:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习学习!

TA的精华主题

TA的得分主题

发表于 2009-2-23 15:07 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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