我有一个标有(和一些未标记的!)段落的文件:
1.0 ...
...
2.4.3 ...
...
6.18.21.8 ...
等等。
我需要找到所有这些标签,并且只查找那些标签(无论段落内容是什么以及可能存在的其他文本,例如未标记的段落/文本)。预期的文件格式是:
现在我有了这个表达式,它可能很接近但不正确,因为Word解释第一组括号内的表达式,因为我想重复匹配而不是模式。 (我需要后者。)
^13([0-9]@[\.])@[0-9]@( )
如上所述,有关编写正则表达式以获得正确结果的任何提示吗?
答案 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:
[\.]
的点或反斜杠 - 但需要[\\.]
代替(在我的版本中)。