最近对正则表达式产生了浓厚的兴趣,其实远在前年,孔兄已给我一个秘籍,只是无心研习。 一入此门,方知天高地厚。 其实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编辑过] |