2013-04-05 2 views
1

Я ужасен в регулярном выражении и должен удалить все из большой части текста, за исключением определенного объявления переменной, которое происходит много раз, id хотел удалить все, кроме экземпляров mc_gross = anyint.Удалить все до и после переменной = int

+0

Чтобы подтвердить, что вы хотите выбрать все _except_ that?Было бы хорошо выбрать их, и они инвертируют выбор (я считаю, что блокнот имеет этот вариант). – Sepster

+0

Да, и некоторые примеры (источник и цель) были бы хороши? –

+0

Я хотел бы удалить весь текст, кроме случаев mc_gross = anyint – looter

ответ

1

Найти:[\s\S]*?(mc_gross=\d+|\Z)
Заменить:\1

Расположите курсор в начале текста, а затем Заменить все.

Добавить слово границы \b вокруг mc_gross=\d+ если считаете, что это необходимо.

+0

Confused by '[\ s \ S]'. '\ S' означает любой пространственно-подобный символ. '\ S' означает любой не-пространственный символ. Комбинация должна означать любой символ, такой же, как '.' (то есть точка). – AdrianHHH

+0

@AdrianHHH. Да, но в отличие от '.' Он также будет соответствовать новым символам. (Хотя в редакторе есть флажок, чтобы в любом случае совпадение совпадало с символами '.'). – MikeM

3

Обычно нам нужно использовать «негативные образы», ​​чтобы найти все, кроме указанной строки. Но они довольно неэффективны (хотя в этом случае это, вероятно, мало что касается), а lookaround не поддерживается всеми механизмами регулярных выражений (не уверен в отношении блокнота ++ и даже тогда, вероятно, зависит от используемой вами версии).

Если вы заинтересованы в получении информации о таком подходе, обратитесь к How to negate specific word in regex?

Но независимо от того, так как вы являются с помощью Notepad ++, я бы рекомендовал выбирать свою цель, а затем инвертировать выделение.

Это выберет каждый экземпляр, позволяющий использовать дополнительное пространство с обеих сторон знака '='.

mc_gross\s*=\s*\d+ 

Следующий ответ над на супер-пользователь объясняет, как использовать закладки в блокноте ++ для достижения «обратный выбор»:

https://superuser.com/questions/290247/how-to-delete-all-line-except-lines-containing-a-word-i-need

Заменитель регулярное выражение они используют там, с один выше.

+0

@TimPietzcker спасибо за это редактирование mate. Мозг исчезает. – Sepster

+0

Как я могу это сделать? Я пробовал использовать закладки, но не повезло. – looter

+0

@looter, как бы вы инвертировали выбор? Я обновил ответ ссылкой, которая объясняет процесс, используя закладки. – Sepster

2

Вы можете заменить регулярное выражение ^.*\b(mc_gross\s*=\s*\d+)\b.*$ на \1. Это приведет к удалению всего текста, кроме желаемого текста в каждой строке. Обратите внимание, что на строках, где требуемый текст возникает два или более раз, сохраняется только одно событие. В поиске ^.*\b соответствует от начала строки до границы слова перед желаемым текстом; \b.*$ соответствует всему, от границы слова после желаемого текста до конца строки; круглые скобки Захват желаемый текст для замещающего текста. Если текст, такой как abcmc_gross=13def, должен быть сопоставлен и сохранен как mc_gross=13, тогда удалите \b s из поиска.

Чтобы удалить нежелательные линии сделать поиск по регулярному выражению для ^mc_gross\s*=\s*\d+$ из вкладки Марка, отметьте Закладку линии и нажмите Отметить все. Затем используйте Меню =>Поиск =>Закладка =>Удалить немаркированные строки.

Смежные вопросы