Ограничить поиск и замену Regex определенными записями

У меня есть партии записей, к которым я применяю стандартное форматирование. Каждый пакет имеет несколько записей заголовков, которые не следует трогать, за которыми следуют сотни пользовательских записей.

Одним из таких форматов является добавление точки после любого инициала или аббревиатуры, у которой ее нет, например, Smith, Dan F O'M или St Sebastian.

Мое регулярное выражение (на основе Perl) в Textpad начинается так:

(\<[[:upper:]]\>(?:'[[:upper:]])?)([", ])

который говорит найти слово из 1 символа, за которым может следовать апостроф и 1 символ, а затем заканчивается любой из кавычек, запятой или пробелом. (игнорируя другие сокращения для ясности). Замена вставляет точку-

  $1.$2

Моя проблема заключается в том, чтобы исключить строки заголовков. Строки заголовков не начинаются с альфа-канала, в отличие от пользовательских строк. Моя мысль состоит в том, чтобы добавить спереди-

 ^[[:alpha:]].*?

Это работает, выбирая с начала записи, но затем мне нужно запустить замену всех несколько раз для такого количества сокращений, которое может разумно встречаться в записи (три, кажется, нормально).

Существует ли какая-либо конструкция Regex для размещения в пользовательских записях и выбора/замены только каждого небольшого элемента, чтобы курсор не перемещался за начало следующего инициала в той же записи?


person Lyle    schedule 19.10.2020    source источник


Ответы (1)


Предоставление обновления в ответ на мой вопрос-

Я получил ответ на форуме Textpad, когда поставил там эту проблему. Похоже, что нет общей конструкции, позволяющей разрешить несколько совпадений и замен за один проход, исключая при этом строки, которые не начинаются с альфа-канала. Это связано с тем, что точка курсора переместилась за точку замены.

Модератор форума предложил возможность использования условных выражений Regex для решения проблемы. то есть закодируйте выражение соответствия для 1 инициала, для 2 инициалов, для 3 инициалов. Это может сработать, если формат хорошо структурирован. Однако данные, которые у меня есть, слишком изменчивы.

Я решу эту проблему с помощью несложного подхода к многократному выполнению поиска и замены, как это предлагается в тексте задачи, и автоматизировано в макросе.

Лайл

person Lyle    schedule 26.10.2020