Найти и заменить текст между ^ и ~ в Notepad ++

22

У меня большой текстовый файл, в котором я хочу удалить весь текст между символом ^ и символом ~. Это должно работать через линии также.

Я попытался сделать обычный поиск и замену, используя ^*~в поле «Найти» и ничего в поле «Заменить», но он нашел 0 результатов.

пышность
источник

Ответы:

24

Это невозможно при обычном поиске и замене . Если вы используете Notepad ++ 6, вы можете воспользоваться новым движком регулярных выражений, который поддерживает PCRE ( источник ).

Нажмите Ctrl+, Hчтобы открыть диалоговое окно « Найти и заменить » и выполнить следующее действие:

Find what:          \^.*?~
Replace with:       
Wrap around:        checked
Regular expression: selected
. matches newline:  checked

Теперь нажмите Alt+, Aчтобы заменить все вхождения.

Регулярное выражение в Find, составленное следующим образом:

  • \^это буквальный ^ .
  • .*? Наименьшее количество символов, которое позволяет регулярному выражению соответствовать.
  • ~это буквальный ~ .
Деннис
источник
3
если вы измените. *? ~ на [^ ~] * ~ тогда он должен работать без необходимости / использования PCRE.
Бароп
1
@barlop: я использовал обычные функции поиска и замены в режиме поиска: обычный , а не поиск и замена с использованием регулярных выражений. Это могло быть недоразумением. В любом случае, если я правильно помню, версии до 6 не поддерживали многострочные шаблоны.
Деннис
.*?Образец работал для меня искать между персонажами ;и <. Таким образом, поиск НАЙТИ ;.*?<ЗАМЕНУ ;с параметрами, выбранными для Regular expressionи. matches new line
SherlockSpreadsheets
8

Ты захочешь найти \^.*?~и убедиться . новая строка включена:

введите описание изображения здесь

Это потому, что ^имеет особое значение, оно соответствует началу строки. Таким образом, нам нужно избежать обратной косой черты \^.

Запись ^*будет соответствовать «любому количеству начала строки в строке». .*соответствует «любому символу», но по умолчанию не соответствует переводу строки.

Der Hochstapler
источник
2
Будьте осторожны с жадным поведением регулярного выражения. Если есть несколько ~символов (или то есть несколько совпадений), это будет соответствовать первому ^полностью или до последнего ~.
тяжело
@heavyd <вопрос> Вы уверены? </ question>. Он использовал *?это не жадный, он ленивый .*?~никогда не будет соответствовать больше, чем один ~. Так что все в порядке.
Barlop
@ barlop: Он прокомментировал вскоре после того, как я ответил. Это был ниндзя-править.
Der Hochstapler
2

Попробуйте использовать это регулярное выражение в разделе поиска, \^[^~]*~ чтобы заменить все между ^ и ~ включительно.

barlop
источник
и исключительно, тогда я полагаю, что требуется PCRE, затем сделать что-то (? <= ^) [^ ~] * (? = ~) У меня нет n ++, чтобы проверить это, butif, который не может измениться (? <= ^ ) до (? <= \ ^)
скачка
Для исключительно, просто заменить на ^~.
Деннис
@ Деннис Я имею в виду, если он хочет заменить все между ^ и ~, но не включая ^ и ~
барлоп
1
Разве это не то, что вы получите, если заменить \^[^~]*~на ^~?
Деннис
@ Денис, я понимаю, что ты имеешь в виду, хорошая мысль.
Barlop
0

У меня было похожее ЗАМЕСТИТЕЛЬНОЕ требование замены с начальным и конечным символами. Это пришло из внешнего вида электронной почты; сотни членов, и я просто хотел, чтобы имена людей со всем удаленным между <RemoveTextHere> .

оригинал

First1 Last1 <First1.Last1@email.com>; First2 Last2 <First2.Last2@email.com>; First3 Last3 <First3.Last3@email.com>; First4 Last4 <First4.Last4@email.com>;

Деннис был близок к моему решению, Find what: \^.*?~но я должен был изменить свои буквальные символы, Find what: \<.*?>тогда я должен был удалить первую косую черту Find what: <.*?>.

Обновлено Find what: <.*?> ; Заменить пустым.

First1 Last1 ; First2 Last2 ; First3 Last3 ; First4 Last4

_

Специальные символы : *, $, \, +, ^, (и ), [, ], {и}

Джерри Джеремия описывает специальные символы здесь /programming/37742519/notepad-wildcard .

SherlockSpreadsheets
источник
Это не отвечает на вопрос.
Тото