我有一个词汇表,其中的条目以粗体显示,而解释性文本是常规字体。我想做的是在每个粗体文本后添加一个逗号(星号或任何其他标点符号),这样我就可以将术语表转换为Excel中逗号分隔的文本。有没有办法在Word的查找和替换对话框中使用正则表达式执行此操作,因此我可以在单词或短语的末尾添加逗号,这是词汇表中的条目。以下是词汇表中的一个条目作为示例:
废除生效 ....常规字体条目的内容..
该条目是粗体短语,与其相关的解释以常规文本形式给出。
尝试表达< [A-Za-z \,.-)(/ \?!] {1,}> 后,Jerry在“查找”框中提示并 ^ &,在MS Word的替换框中,我得到了粗体短语的所需结果,后面跟着段落和标题:
http://img811.imageshack.us/img811/6338/frontpagep.jpg
但词汇表条目没有发生任何变化,因为它们后面跟着条目的内容,后面没有分段。以下是词汇表中的示例,显示词汇表条目的特征布局:
http://img571.imageshack.us/img571/6558/samplefromtheglossary.jpg
答案 0 :(得分:0)
使用通配符,将格式字体设置为粗体。要进行搜索,请输入<*>
。要进行替换,请输入^&,
。 Picture is worth a thousand scripts
答案 1 :(得分:0)
一些简单的搜索显示以下文档至少适用于旧版本的Word-2002。
请注意,Word的Regex实现与其他人的实现不太一致。
我没有看到更新版Word的文档。 Visual Studio中的搜索和替换(我认为这也适用于免费版本),或者像Eclipse这样的IDE确实支持Regex,因此您可以使用许多非Word选项。
答案 2 :(得分:0)
你可以尝试一下这个:
<[A-Za-z\,\.\-\)\(\/\?\! ]{1,}>
而不是之前建议的<*>
乔治的建议?
对OP进行新编辑:
您可以尝试将其放入宏中:
Sub CommaAdder()
Selection.Find.ClearFormatting
Selection.Find.Font.Bold = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "<[A-Za-z]@>"
.Replacement.Text = "^&,"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.Text = ",([\)])"
.Replacement.Text = "\1,"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.Text = ",([\-\?\/\!\.\, ])"
.Replacement.Text = "\1"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.Text = "([A-Za-z]@ )"
.Replacement.Text = "\1,"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.Text = "( \,)([A-Za-z]@)"
.Replacement.Text = ", \2"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.Text = "\,\("
.Replacement.Text = "("
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.Text = "\, "
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
With Selection.Find
.Text = " \,"
.Replacement.Text = ", "
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
Selection.Find.Execute Replace:=wdReplaceAll
End With
End Sub
我不知道如何编写宏,但是我记录了一个替换来构建它,如果你理解了一点,就会有3个替换继续进行。第一个查找所有粗体单词并在它们之间加上逗号,即使有)
或.
等等。第二个看起来专门针对我刚刚提到的删除该逗号的实例,以及那些我们有一个逗号后跟一个粗体空格,
的地方,但,)
部分除外,它在最后一次替换中被解决,而是替换为),
。
问题在于,如果你有类似的东西:
这是粗体但不是
bold
和but
之间的空格也具有bold
格式,它将在第二次替换时删除。如果有一种方法可以找到部分为粗体而部分不是粗体的文本,则不会有任何问题。我正在尝试寻找解决方案,但如果此代码存在任何问题,请告诉我。如果没有像这样格式化为粗体的空格,则不会有任何问题!
reEDIT:现在这也适用于大胆的空间!虽然它不太整洁......