![Notepad++/Регулярное выражение для поиска строки с одинаковым началом, разным окончанием](https://rvso.com/image/1304074/Notepad%2B%2B%2F%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5%20%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D1%81%20%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BA%D0%BE%D0%B2%D1%8B%D0%BC%20%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%BE%D0%BC%2C%20%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D0%BC%20%D0%BE%D0%BA%D0%BE%D0%BD%D1%87%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC.png)
Итак, я немного почитал и обнаружил, что NotePad++ не использует «нормальные» регулярные выражения (начинаю думать, что мне просто придется вернуться к SciTE), но вот мой вопрос:
У меня есть экспортированный список данных с некоторыми избыточными данными, которые я пытаюсь очистить и преобразовать в хороший CSV-файл для импорта в адресные книги (мигрирую решение для факс-сервера, старый уже устарел, поэтому это лучшее, что я могу получить для экспорта).
Строка, которую я пытаюсь удалить из каждой группы записей, всегда начинается
Запись: ИМЯ ~
А затем следует 12-значный буквенно-цифровой (кажется, шестнадцатеричный) код, который уникален для каждой группы записей. Для нескольких групп записей есть понятная человеку запись после "NAME", но их достаточно мало, и я могу удалить их вручную, поэтому сопоставление их не составит большого труда.
Итак, я хочу найти каждую строку, которая начинается с Entry: и выделить ее до конца строки. Каждая запись в каждой группе находится на отдельной строке. Затем я использую Find & Replace, чтобы удалить эти строки из списка.
ОБНОВЛЕНИЕ: Вход и выход
Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: John
FamilyName: John
DearName: John
Organisation: Acme 1 Corp
Via: FAX-ANY 1(555) 123-4567
Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: Sam
FamilyName: Sam
DearName: Sam
Organisation: Acme 2 LLC
Via: FAX-ANY 1(555) 890-1234
Вот две группы записей. Я хочу удалить строки, начинающиеся с "Entry:" из каждой группы.
решение1
Другим вариантом было бы
^Entry: NAME .*
Который будет искать строки, начинающиеся с Entry: NAME
и все, что после этого.
решение2
С использованием
^Entry: NAME ~\d+$
поскольку шаблон поиска, похоже, работает так, как и требовалось.
Я бы лично рекомендовал сопоставление с использованием \d
заполнителя (который соответствует любой одиночной цифре в диапазоне от 0
до 9
) вместо более общего .
заполнителя. На самом деле, вы даже должны сделать это:
^Entry: NAME ~\d{12}$
указать, что вы ожидаететочно12 цифр подряд. Таким образом, если запись может содержать что-то, чего вы не ожидали, вы не замените это случайно.
Если строка представлена в шестнадцатеричной системе счисления, можно использовать:
^Entry: NAME ~[0-9a-fA-F]{12}$
Обратите внимание, что я не проверял, правильно ли работают последние два примера в Notepad++, но, насколько мне известно, это довольно простой синтаксис.