Я пытаюсь увеличить на фиксированную сумму каждые номер страницы в файле со следующим содержанием (это индекс для книги):
Adam undЕва 42–44 (абб. 14, 15)
Библиотека Апостолическая Ватикана Код. грамм1613 31 31 (Сокр. 8)
Гамбург, Staatsbibliothek Ms. 151 в скрин. 35 (абб. 11)
Transverberation der Hl. Тереза фон Авила 10, 18 (абб. 2, деталь S. 8)
Файл содержит цифры для годов, цифр и т. Д. Однако номера страниц
- никогда не бываютперед "Abb." или "Ms."
- имеют 3 цифры или меньше
Я хотел бы добавить число 4 к номерам страницы, в идеале приводя к
Адам и Ева 46–48 (абб. 14, 15)
Библиотека Апостолическая Ватиканская треска. грамм1613 35 35 (Сокр. 8)
Гамбург, Staatsbibliothek Ms. 151 в скрин. 39 (абб. 11)
Transverberation der Hl. Theresa von Avila 14, 22 (Abb. 2, Detail S. 12)
Устное правило может быть таким: Добавить 4 к каждому числу, если оно имеет 3 цифры или меньше и если ему не предшествует«Abb. | Ms.» Или другое число, которое отделено от «,» и, в свою очередь, предшествует «Abb. | Ms.»
Следующая строка
perl -pe 's/(?<!Abb. )(\b\d{1,3}\b)/$1+4/eg' original.md
производит
Adam und Eva 46--48 (Abb. 14, 19)
Biblioteca Apostolica Vaticana Cod. gr. 1613 35 35 (Abb. 8)
Hamburg, Staatsbibliothek Ms. 155 in scrin. 39 (Abb. 11)
Transverberation der Hl. Theresa von Ávila 14, 22 (Abb. 2, Detail S. 12)
Осталось две проблемы, первая из которых наиболее актуальна:
- Число второй цифры в строке 1, конечно, увеличилось на 4. Но я незнаю, как это исправить. Я знаю, что я мог бы расширить среднюю часть до чего-то вроде
(\b\d{1,3}\b),?\s?(\b\d{1,3}\b)?
и сослаться на второе число с $2
, но я не знаю, как обращаться с разделительной запятой (если она существует) в замене. - Число после "Ms." увеличилось на 4. Но если я изменю негативный взгляд на
(?<!(Abb. |Ms. ))
, я получу ошибку Variable length lookbehind not implemented in regex m/(?<!(Abb. |Ms. ))(\b\d{1,3}\b)/ at -e line 1.
Я не знаю альтернативы такой реализации.
Буду признателен за любую помощь по этим двум проблемам!