Это мой первый вопрос, поэтому, пожалуйста, поддержите меня, пока я попытаюсь написать его как можно аккуратнее и полнее!
Я пытаюсь выполнить поиск и замену в Notepad++ с помощью регулярного выражения, но получаю странные результаты, которых не понимаю. Может кто-нибудь объяснить, где я ошибаюсь и что я могу сделать, чтобы достичь желаемого результата, пожалуйста?
Я использую Notepad++ версии 6.8.3.
У меня есть несколько файлов журналов, в которых необходимо отредактировать любую информацию о клиентах. Мне нужно найти текст Name:
и заменить все после него на *REDACTED*
Это нужно сделать с помощью «Заменить в файлах». Ниже приведен пример конкретных случаев:
applicantDetailsCommand.firstName: Arnold
blah blah blah blah blah blah blah blah blah blah blah
applicantDetailsCommand.middleName: Judas
applicantDetailsCommand.lastName: Rimmer
blah blah blah blah blah blah blah blah
blah blah blah blah
applicantDetailsCommand.firstName: Dave
applicantDetailsCommand.middleName: Cinzano Bianco
applicantDetailsCommand.lastName: Lister
blah blah blah blah blah blah
blah blah blah
Чтобы сделать это, я начал поиск, используя поиск позади, таким образом: (?<=Name: ).*$
, который работал нормально и нашел все записи после firstName, lastName и т. д. Однако в любом файле, который не содержал «Имя:», весь файл соответствовал включая все строки, поэтому я не могу использовать это в «Заменить в файлах», так как он просто заменит весь файл на «*УДАЛЕНО*».
Затем я попытался сопоставить строку без использования просмотра назад, поэтому искал (Name: ).*$
и собирался заменить его на $1\*REDACTED\*
, что сработало, но я также обнаружил, что он нашел несколько других строк, таких как «host_name» и « URIName", чего я не хотел.
В этот момент я решил использовать группу только с той альтернативой, которую я действительно хотел сопоставить, поэтому попробовал это: (first|middle|last|account)Name: .*$
, который начал сопоставлять полные файлы, когда в файле не было ни accountName, ни firstName, ни middleName, ни lastName.
Я прочитал множество разных статей на tinterweb, но не могу найти ничего, что объясняло бы, почему при отсутствии совпадения сопоставляется полный файл.
Любая помощь, объясняющая это, будет высоко оценена.
Большое спасибо.
(first|middle|last|account)Name: .*$
при поиске всех файлов, вы говорите, что он сообщает, что он соответствует полным файлам. Это похоже на ошибку, если вы отключили совпадения с новой строкой, поскольку для каждого совпадения должны сообщаться номера строк. Ваше регулярное выражение кажется прекрасным. Возможно, вам стоит обновиться до 6.8.7? - person waynethec   schedule 02.12.2015