Как использовать подстановочные знаки, чтобы найти годы между 1900 и сейчас
Я хочу знать, сколько раз любой год с 1900 по текущий год упоминается в файле Word.
Я знаю, как использовать подстановочное выражение, чтобы сделать это в два этапа следующим образом:
<(19 [0-9] {2})> чтобы найти совпадения 1900-1999
<(20 [0-9] {2})> чтобы найти совпадения 2000-2099
Каков синтаксис, чтобы уменьшить это до одного шага?
В случае, если это имеет значение, я использую Word 2010.
Причина вопроса Когда я оцениваю усилия по редактированию академических работ, я хочу учесть огромное количество цитат в тексте, которые нужно "очерчить" для пропущенных запятых, скобок и тому подобного.
Абсолютное число должно быть тем, в котором я уверен; число не должно быть точным.
3 ответа
Лучше всего искать 4-значные числа, начинающиеся с 1 или 2 <[1-2] [0-9] {3}>, но насколько это точно зависит от содержимого документа.
Изучив ответы от der_michael (вверху) и Peter (внизу), я смог объединить их советы, чтобы получить такой ответ:
<[1920] {2} [0-9] {2}>
До сих пор я пробовал синтаксис с тремя статьями, с количеством ссылок в тексте в диапазоне 300-731. Количество ложных срабатываний было приемлемым (1, 2 и 2).
Это регулярное выражение, соответствующее всем годам между 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