我想知道从 1900 年到当前年份的任何年份在 Word 文件中出现的次数。
我知道如何使用通配符表达式分两步执行此操作,如下所示:
<(19[0-9]{2})> 查找匹配项 1900-1999
<(20[0-9]{2})> 查找匹配项 2000-2099
将其简化为一步的语法是什么?
为了避免有差异,我使用的是 Word 2010。
提问理由 当我估算编辑学术论文的工作量时,我会将需要“目测”缺少的逗号、括号等的文内引用的绝对数量考虑在内。
这个绝对数字必须是我高度信任的数字;这个数字不必精确。
答案1
最好的方法是查找以 1 或 2 <[1-2][0-9]{3}> 开头的 4 位数字,但其准确性在很大程度上取决于文档的内容。
答案2
通过研究 der_michael(上文)和 Peter(下文)的回答,我结合他们的建议得出了这个答案:
<[1920]{2}[0-9]{2}>
到目前为止,我已经在三篇论文中尝试了该语法,文内引用数从 300 到 731 不等。误报数是可以接受的(1、2 和 2)。
答案3
这是一个正则表达式,用于匹配 1900 年至 2015 年之间的所有年份
\s((19[0-9][0-9])|(200[0-9])|(201[0-5]))\s
- 基本结构是
((first_range) OR (second_range) OR (third_range))
- 我们使用逻辑或
|
来允许三个范围(19[0-9][0-9]
从 1900 年到 1999 年(200[0-9])
从 2000 年到 2009 年(201[0-5])
从 2010 年到 2015 年
\s
查找匹配项前后的空格。这可以防止出现负数
不幸的是,你不能在 Word 的查找和替换对话框。您必须打开 VBA 编辑器 ( ALT+ F11) 并粘贴以下宏。使用以下命令执行它F5
系统会弹出一个输入窗口,供您输入 RegEx 模式。如果您选择,宏会统计所有出现的情况并突出显示它们
Sub RegexReplace()
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
'On Error Resume Next
RegEx.Global = True
RegEx.Pattern = InputBox("Enter your regex pattern to find and count")
Set Matches = RegEx.Execute(ActiveDocument.Range)
answer = MsgBox("There are " & Matches.Count & " occurances" & vbCrLf & _
"Highlight them?", vbYesNo)
If answer = vbYes Then
For Each hit In Matches
ActiveDocument.Range(hit.FirstIndex, hit.FirstIndex + hit.Length). _
HighlightColorIndex = wdYellow
Next hit
End If
End Sub