SUBLIME с GREP: поиск слов, игнорируя определенные строки - PullRequest
2 голосов
/ 20 сентября 2019

У меня длинный текстовый документ, содержащий более 24 000 строк.Мне нужно найти 83 разных слова и удалить все экземпляры этих 83 слов, когда слова встречаются в одной строке (см. Пример ниже).Слова будут удалены.Но поиск должен игнорировать:

  • все строки, которые имеют только заглавный текст
  • Все строки, которые начинаются с символа § (независимо от того, есть ли заглавная или нижняя строкарегистр букв).

Пример

§History of TIME
HISTORY OF TIME
of
Future
Past
Of
Many Of
Official
Officer
North of the town
I am one of them 

Если я ищу Of, то в приведенном выше тексте будет выделена только третья и шестая строка.

Первая строка не будет выделена, потому что она начинается с §.

Вторая строка не будет выделена, потому что она заглавная.

Many of, North of the town и I am one of them не будут выделены, поскольку они не Of сами по себе.

Возможно ли это в Sublime?Я думаю, что поиск всех 83 отдельных слов сделает запрос слишком сложным.Но если я могу искать по одному слову за раз (при условии, что оно пропускает все строки заглавными буквами и все строки, начинающиеся с §, тогда это будет нормально).

Если это невозможно в Sublime, есть ли другой способ, который я могу использовать?

1 Ответ

0 голосов
/ 23 сентября 2019

Вы говорите, что хотите удалить все вхождения of, когда строка не начинается с § или имеет значение ALLCAPS, и когда она не является частью фразы many of, north of, one of и т. Д..

Использование

Найти : (^(?:(?:§.*|[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*))$|(?i:\b(?:many|north|one)\s+of\b))|(?i:\bof\b) Заменить : $1

См. regex demo

Подробности

  • (^(?:(?:§.*|[^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]*))$|(?i:\b(?:many|north|one)\s+of\b)) - Группа захвата 1 (обозначается $1 заполнителем из шаблона замены):
    • ^ - начало строки
    • (?: - группа:
      • §.*
      • | - или
      • [^[:alpha:]\n\r]*[[:upper:]]+(?:[^[:alpha:]\n\r]+[[:upper:]]+)*[^[:alpha:]\n\r]* - 0+ символов, кроме символов и букв LF / CR, затем 1+ заглавные буквы, затем 0+ последовательности несимволы разрыва строки и без букв, за которыми следуют 1+ заглавные буквы и заканчивающиеся последовательностями из 0+ символов без разрыва строки и без букв
      • )$ - конец
    • | или
      • (?i:\b(?:many|north|one)\s+of\b) - сопоставление нечувствительной к регистру группы many, north или one, за которым следуют 1+ пробелов и затем of как целые слова
  • | - или
  • (?i:\bof\b) - группа без учета регистра: of как целое слово.

См.тест SublimeText3, не забывайте выбирать режим регулярных выражений и case sensitIve Matching:

enter image description here

...