Удалите все, кроме определенного шаблона
У меня есть файл журнала с большим количеством строк.
Я хотел бы удалить все из этого файла (найти и заменить), за исключением любой строки, которая начинается с: 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