Удалите все, кроме определенного шаблона

У меня есть файл журнала с большим количеством строк. Я хотел бы удалить все из этого файла (найти и заменить), за исключением любой строки, которая начинается с: phone= и заканчивается Digits=1

например: phone=97212345678&step=1&digits=1

Чтобы найти эту строку, я использую (phone=.*digits=1), и она работает! но мне не удалось найти регулярное выражение, чтобы выбрать все, кроме этой строки, и очистить их все.

образец файла.

Ответ 1

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

В Notepad ++ используйте

        Найти: .*(phone=\S*?digits=1).*
Заменить: $1

ПРИМЕЧАНИЕ: . соответствует опции новой строки.

Я использую \S*? вместо .* внутри шаблона захвата, так как вы хотите только совместить любые символы без пробелов как можно меньше от phone= до ближайшего digits. .* слишком жадный и может растягиваться на несколько строк с опцией DOTALL.

UPDATE

Если вы хотите сохранить несколько нескольких вхождений шаблона в текст, в Notepad ++, вы можете использовать

.*?(phone=\S*?digits=1)

Заменить на $1\n. При этом вы удалите все нежелательные подстроки, кроме тех, которые были после последнего вхождения вашего необходимого подшаблона.

Вам нужно будет удалить последний фрагмент либо manaully, либо

   FIND: (phone=\S*?digits=1).*
REPLACE: $1

Ответ 2

Если вы используете некоторые инструменты, такие как Notepad ++ или EditPlus, вы можете использовать следующую замену regex:

Найти строку: ^phone=(\d+&step=1&)digits=1

Заменить строку: \1

Ответ 3

Regex, чтобы найти соответствие:

.

/^ телефон = + & цифры = 1 $/

Чтобы заменить файл, кроме соответствия:

/^ (?! телефон = + &. Цифры = 1 $). */Г

Ответ 4

Скажем, у вас есть данные вроде:

"для плана выполнения [ID = 7420] на 12/06/2018 08:00:00"

вы хотите извлечь только часть [ID = dddd] из тысяч строк. В Notepad++ нажмите ctrl + h open replace window, проверьте регулярное выражение.

Найти то, что:

.*?(\[ID = \d+\]).*

Заменить:

\1