MS Word使用正则表达式查找,重复PATTERNS

时间:2015-07-08 18:19:56

标签: regex ms-word

我有一个标有(和一些未标记的!)段落的文件:
1.0 ...
...
2.4.3 ...
...
6.18.21.8 ...
等等。

我需要找到所有这些标签,并且只查找那些标签(无论段落内容是什么以及可能存在的其他文本,例如未标记的段落/文本)。预期的文件格式是:

  • 新段落字符,后跟
  • 一个或多个数字字符,后跟
  • 一段时间,然后是
  • 前两个步骤的若干次迭代,按顺序(数字字符和句点),后跟
  • 一个或多个数字字符,后跟
  • 两个空格

现在我有了这个表达式,它可能很接近但不正确,因为Word解释第一组括号内的表达式,因为我想重复匹配而不是模式。 (我需要后者。)

^13([0-9]@[\.])@[0-9]@(  )

如上所述,有关编写正则表达式以获得正确结果的任何提示吗?

2 个答案:

答案 0 :(得分:0)

这与你的patern的最后5步相匹配,我不确定你对新段落字符的意思,但是如果它总是相同的字符,只需将它放在字符串的开头即可。

([0-9]+.)+[0-9]+(  )

如果您打开使用VBA,这里有一个sub,它将用您更改replace变量的任何内容替换匹配。请注意,您需要激活正则表达式库,您可以学习如何执行here(它适用于Excel,但在单词中的工作方式相同)。然后添加一个模块并粘贴下面的文本。我认为新角色要么是\ n,要么是\ t但是我并不是100%肯定。

Sub remove()
Dim reg As New RegExp
Dim pattern As String
Dim replace As String

replace = ""
pattern = "([0-9]+.)+[0-9]+(  )"
With reg
    .Global = True
    .MultiLine = True
    .IgnoreCase = False
    .pattern = pattern
End With


If reg.Test(ActiveDocument.Range.Text) Then ActiveDocument.Range.Text = reg.replace(ActiveDocument.Range.Text, replace)

End Sub

答案 1 :(得分:0)

Word似乎不符合自己的正则表达式文档。在某种程度上,使用搜索和替换框中的特殊下拉列表可能会有所帮助。在我的情况下,它会为重复次数插入 {;} 而非记录的 {,} 。 (一旦你知道半冒号而不是逗号,你当然可以自己插入... - 另一方面:即使在不同版本的Word之间,这似乎也有所不同。)谈到重复,Word表现出重要意义处理这些问题很麻烦。

您可能需要验证此搜索您的示例和一个小的添加

1.0  ...
...
2.4.3  ...
...
6.18.21.8  ...
...
...1.0  ...

^13([0-9]@.)@[0-9]@。它实际上应该匹配相应行开头的前三个数字 - 点 - 序列 - 但不是第四个,其中行以其他字符开头。但是,在我的单词版本中,它只匹配第一个单词。这与第一个匹配的^13([0-9]{1;}.){1;}[0-9]{1;}一致 - 只有 - ^13([0-9]{1;}.){2;}[0-9]{1;}根本不匹配任何内容。 (这同时反映了您对重复精确序列的观察,而不是要匹配的模式。)

您可能希望检查RegEx 101中的转录作为概念证明。

最接近您要求的可能是:

  • ^13[0-9.]{1;}(调整后的^13[0-9.]{1;}.[0-9]{1;}再次无法正常工作) - 不幸的是接受模式,您实际上希望看到被排除在外,或者
  • 正在运行^13[0-9]{1;}.[0-9]{1;}^13[0-9]{1;}.[0-9]{1;}.[0-9]{1;}^13[0-9]{1;}.[0-9]{1;}.[0-9]{1;}.[0-9]{1;}等,这些都缺乏正则表达式的美感/灵活性 - 但更加严格。

根据您的总体要求,您可能最好为该特定工作使用不同的工具。

BTW:

  • Word使用代替来表示任何字符。这就是为什么点不需要在上面的表达式中进行转义。
  • Word实际上应该接受[\.]的点或反斜杠 - 但需要[\\.]代替(在我的版本中)。
  • “前两步的一些迭代次数”(沿着您的示例代码)读取为最小一次
  • 由于处理HTML中的空格,上述正则表达式中的尾随空白丢失。
  • 如果您对标题使用单词功能(特别是使用相应的标题样式):您是否尝试使用大纲视图 (可能与文本正文未显示)以进一步实现您的目的