以下是引用tangqingfu在2008-10-6 13:46:00的发言:请教sylun兄: 1、在处理一楼第二个问题时,感觉sylun兄的代码是以制表符为标记进行执行代码的,请教能否加入半角空格,全角空格及不间断空格的情况(即题与题之间是以半角空格,全角空格或不间断空格隔开)? 2、关于6楼代码的测试: 在新文档中产生删除内容的新文档,但原档没有发生变化.请sylun兄帮忙再解决一下? 3、能否将2楼和6楼的二段代码合并成一个? 4、能否使上述的代码做到在选中的状态下,只删除选中的内容;没选中的状态下,则全文进行查找删除? 6楼代码已提供在原文档进行文本替换的语句选择(下同)。 以下代码针对上面几个问题修改,并作某些规范处理,主要功能包括:统一小题编号格式、统一小题编号前的空白字符格式、统一破折号字符、删除主要内容重复的段落(以括号及编号开头的)、'删除内容重复的段落(段首为制表符)、删除内容重复的小题(开头为段首或制表符)、删除段末空白字符。程序只作纯文本处理,且不记录删除内容。请自行测试。
Sub test3() '引用Microsoft VBScript Regular Expressions 5.5 Dim myExp As New RegExp, mySearch, myReplace, myRange As Range, otext As String, mytext As String, i As Byte mySearch = Array("(\d+)([.、.]+[ ]*)", "([ \xA0\t ]+)(\d+\. )", "-{2,3}", "^([ \(\) ]+\d+\. )(.+?\r)(.+?)^[ \(\) ]+\d+\. \2", _ "(^\t.+\r)(.*?)(\1)", "(^\d+\. |\t\d+\. )(.+?)([\r\t].+?[\r\t])\d+\. \2", "(^|^\d+\. )(.+?\r)(.*?)(\2|\d+\. \2)", "\s*$") myReplace = Array("$1. ", vbTab & "$2", ChrW(8212), "$1$2$3", "$1$2", "$1$2$3", "$1$2$3", "") Set myRange = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range) '没有选定内容则进行全文档处理 otext = myRange.Text With myExp .Global = True .Multiline = True For i = 0 To UBound(mySearch) '按照搜索模式与替换代码数组数据对指定文本进行处理 .Pattern = mySearch(i) Do mytext = .Replace(otext, myReplace(i)) If mytext = otext Then Exit Do otext = mytext Loop Next End With 'myRange.Text = mytext '文档文本替换 Documents.Add.Content = mytext '处理结果以新文档输出 End Sub
[此贴子已经被作者于2008-10-7 11:46:26编辑过] |