本帖最后由 weiyingde 于 2020-2-7 10:38 编辑
目的:现对文档作格式前的预处理,要求删除汉字之间的空格、括号内的答案前后的空格、文档空行等。
问题:括号的答案前后空格不规范:数量不限,或有或无。无法用量词界定。问题如下。
Sub word查找替换无法删去指定空格1()
'预处理:删除汉字之间的空格、括号内的空格、空行。
Dim isr As String
With ActiveDocument.Content
.Find.Execute "([一-龥]@)([ ]@)([一-龥]@)", , , 1, , , 1, , , "\1\3", 2
.Find.Execute "([\((])(*)([A-Z])(*)([\))])", , , 1, , , 1, , , "\1\3\5", 2 '删去括号内的空格,"([\((])(^32@)([A-Z])(^32@)([\))])"不能匹配,因为@代表一个以上。
.Find.Execute "^11", , , 1, , , 1, , , "^p", 2
.Find.Execute "^13^13", , , 1, , , 1, , , "^p", 2
.Find.Execute "[ ]{2,}", , , 1, , , 1, , , " ", 2
End With
End Sub
'结果:7题中选枝中员工(职工)的括号内容去掉了,因为*的意思是:代表任意字符,结果显然是牛死虱死……
Sub word查找替换无法删去指定空格2()
'预处理:删除汉字之间的空格、括号内的空格、空行。
Dim isr As String
With ActiveDocument.Content
.Find.Execute "([一-龥]@)([ ]@)([一-龥]@)", , , 1, , , 1, , , "\1\3", 2
.Find.Execute "([\((])([ ]@)([A-Z])([ ]@)([\))])", , , 1, , , 1, , , "\1\3\5", 2 '删去括号内的空格,"([\((])(^32@)([A-Z])(^32@)([\))])"不能匹配,因为@代表一个以上。
.Find.Execute "^11", , , 1, , , 1, , , "^p", 2
.Find.Execute "^13^13", , , 1, , , 1, , , "^p", 2
.Find.Execute "[ ]{2,}", , , 1, , , 1, , , " ", 2
End With
End Sub
'结果:7题中括号内的空格没有删去,因为@,是一个及以上,有word通配符“零个”以上的量词,该怎么办呢?
Sub word查找替换无法删去指定空格3()
'预处理:删除汉字之间的空格、括号内的空格、空行。
Dim isr As String
With ActiveDocument.Content
.Find.Execute "([一-龥]@)([ ]@)([一-龥]@)", , , 1, , , 1, , , "\1\3", 2
.Find.Execute "([\((])([ ]@)([A-Z])([ ]@)([\))])", , , 1, , , 1, , , "\1\3\5", 2
.Find.Execute "([\((])([A-Z])([ ]@)([\))])", , , 1, , , 1, , , "\1\2\4", 2
.Find.Execute "([\((])([ ]@)([A-Z])([\))])", , , 1, , , 1, , , "\1\3\4", 2
.Find.Execute "^11", , , 1, , , 1, , , "^p", 2
.Find.Execute "^13^13", , , 1, , , 1, , , "^p", 2
.Find.Execute "[ ]{2,}", , , 1, , , 1, , , " ", 2
End With
End Sub
'结果:删去了空格,但用了三行的代码为代价,显得极为啰嗦,有简洁的代码?——请大侠援手。
附件如下:
|