使用正则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中处理的部分,)
取而代之),
而是。
问题是,如果你有这样的东西:
这是大胆的,但不是这个
bold
和bold
之间的空白格式,将在第二次replace时被删除。 如果有一种方法可以用粗体和部分粗体查找文本,则不会有任何问题。 我试图寻找一个解决scheme,但让我知道这个代码是否有任何问题。 如果没有像这样的粗体格式的空白,就不会有任何问题!
reEDIT:这现在也适用于大胆的空间! 虽然不是很整洁