之前介绍了如何一键设置多级标题
但对于已经手动设置了多级标题的论文,使用结果是如此蛋疼:
注:左方是新加的自动多级标题,右方是残留的手动多级标题。
这种情况是很常见的,此时使用手动删除操作是非常麻烦的。因此需要使用模糊查找、替换功能。
首先介绍一下如何通过通配符进行查找、替换的操作。如下图:
选中“使用通配符”之后,就能使用正则表达式来进行模糊匹配了。
表达式:[0-9]表示单个数字,括号表示其内部为一个子表达式,{1,}表示前面的子表达式最少匹配1次,没有指定最多匹配次数。因此“([0-9]){1,}.([0-9]){1,}.([0-9]){1,} ”正好匹配了三级标题。
注:正式的表达式后面加了一个空格,因为word是默认非贪婪匹配的,如果标题后方不是个位数会造成漏掉后面的数字
同时,我们需要筛选格式,选取段落>大纲级别(设置为当前要清理的级别号),避免清理掉正文内容。
为此,我录制了一个一键清理 标题1 标题2 标题3 内的手动标题的宏。仅限修改手动标题为“X.X.X ”的情况,如有不同需要手动更改代码内
.Text = "([0-9]){1,}.([0-9]){1,2}.([0-9]){1,} "
的表达式。
代码如下:
Sub 清理() ' ' 清理 宏 ' ' Selection.Find.ClearFormatting With Selection.Find.ParagraphFormat .OutlineLevel = wdOutlineLevel3'筛选大纲级别为3的 End With Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "([0-9]){1,}.([0-9]){1,2}.([0-9]){1,} " .Replacement.Text = " " .Forward = True .Wrap = wdFindAsk .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting With Selection.Find.ParagraphFormat .OutlineLevel = wdOutlineLevel2 End With Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "([0-9]){1,}.([0-9]){1,} " .Replacement.Text = " " .Forward = True .Wrap = wdFindAsk .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting With Selection.Find.ParagraphFormat .OutlineLevel = wdOutlineLevel1 End With Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "([0-9]){1,} " .Replacement.Text = " " .Forward = True .Wrap = wdFindAsk .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub