使用正则expression式创build分隔文本

我有一个词汇表,其中的条目以粗体显示,说明文字是常规字体。 我想要做的是在每一串粗体文本之后添加逗号(星号或任何其他标点符号),然后使我能够在Excel中将词汇表转换为以逗号分隔的文本。 有没有办法在Word的查找和replace对话框中使用正则expression式来做到这一点,所以我可以在词汇或词组的结尾处获得逗号,这是词汇表中的一个条目。 以词汇表中的一个条目为例:

在生效时废止 ….正式字体的内容

该条目是粗体短语,与其相关的解释以正则文本给出。

在查找表单中find<[A-Za-z \,.-)(/ \ ?!] {1,}> Jerry和MS Word中的replace框中的^&后,得到所需的结果粗体短语后跟段落标题,如标题和标题:


http://img811.imageshack.us/img811/6338/frontpagep.jpg


但词汇表条目没有发生变化,因为它们后面跟着条目的内容,没有段落中断。 以下是词汇表中的示例,显示词汇表条目的特征布局:


http://img571.imageshack.us/img571/6558/samplefromtheglossary.jpg


使用通配符,将格式字体设置为粗体。 为了search,请input<*> 。 为了replace,input^&, 图片值得一千个脚本

一些简单的search显示至less适用于旧版Word的下列文档。

办公室支持文件

请注意,Word的正则expression式的实现不是非常符合其他人的实现。

我没有看到Word的更新版本的文档。 在Visual Studio中search和replace(我认为这也可以在免费版本中使用),或者在像Eclipse这样的IDE中支持Regex,所以你有很多非Word的选项。

你可以试试这个:

<[A-Za-z\,\.\-\)\(\/\?\! ]{1,}>

而不是乔治以前提出的发现?

在新的OP编辑之后:

你可以尝试把这个macros:

 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 

我不知道如何编写macros,但是我logging了一个replace来构build这个macros,如果你理解了这个,有三个replace是一个接一个地进行的。 第一个查找所有大胆的单词,并在它们之间插入一个逗号,即使有)或者. 等等。第二个特别针对我刚刚提到的删除逗号的实例,以及那些我们用逗号加一个大胆的空格的实例,除了在最后一个replace中处理的部分,)取而代之),而是。

问题是,如果你有这样的东西:

这是大胆的,但不是这个

boldbold之间的空白格式,将在第二次replace时被删除。 如果有一种方法可以用粗体和部分粗体查找文本,则不会有任何问题。 我试图寻找一个解决scheme,但让我知道这个代码是否有任何问题。 如果没有像这样的粗体格式的空白,就不会有任何问题!

reEDIT:这现在也适用于大胆的空间! 虽然不是很整洁