Знайдіть і замініть текст між ^ і ~ у Блокноті ++


22

У мене є великий текстовий файл, з якого я хочу видалити весь текст між символом ^ та символом ~. Для цього потрібно працювати і за лініями.

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

Відповіді:


24

Це неможливо при звичайному пошуку та заміні . Якщо ви використовуєте Notepad ++ 6, ви можете скористатися новим двигуном регулярних виразів, який підтримує PCRE ( джерело ).

Натисніть Ctrl+, Hщоб відкрити діалогове вікно " Знайти та замінити" та виконати такі дії:

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

Тепер натисніть Alt+, Aщоб замінити всі події.

Регулярний вираз у знаходженні того, що складається так:

  • \^є буквальним ^ .
  • .*? - найменша кількість символів, що дозволяє збігати регулярний вираз.
  • ~є буквальним ~ .

3
якщо ви зміните. *? ~ на [^ ~] * ~, то він повинен працювати, не вимагаючи / використовуючи PCRE.
барлоп

1
@barlop: Я використовував звичайний пошук і заміну як режим пошуку: звичайний , не знаходьте і замінюйте, використовуючи регулярні вирази. Це могло бути непорозуміння. У будь-якому випадку, якщо я добре пам’ятаю, версії до 6 не підтримували багаторядкові шаблони.
Денніс

.*?Зразок працював для мене шукати між персонажами ;і <. Тож пошук знайдемо ;.*?<ЗАМІНУ ;з обраними параметрами для Regular expressionта. matches new line
SherlockSpreadsheets

8

Ви захочете пошукати \^.*?~і переконатися . увімкнено новий рядок :

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

Це тому, що ^має особливе значення, воно відповідає початку рядка. Таким чином, нам потрібно уникнути цього з відхиленням \^.

Написання ^*відповідатиме "будь-якій кількості початкових рядків підряд". .*відповідає "будь-якому символу", але за замовчуванням він не відповідає новим рядкам.


2
Будьте обережні з жадібною поведінкою регексу. Якщо є декілька ~символів (тобто декілька збігів), це буде відповідати першим ^до останнього ~.
важкий

@heavyd <питання> Ви впевнені? </question>. Він використав, *?що не жадібний, що лінивий .*?~ніколи не відповідатиме більш ніж одному ~. Так це нормально.
барлоп

@barlop: Він прокоментував це незабаром після того, як я відповів. Це була редакція ніндзя.
Der Hochstapler

2

Спробуйте скористатися цим регулярним виразом у розділі пошуку, \^[^~]*~ щоб замінити все між ^ і ~ включно.


і виключно, тоді я гадаю, що вимагає PCRE, тоді зробіть щось (? <= ^) [^ ~] * (? = ~) У мене немає n ++, щоб перевірити це, butif, який не вдається спробувати змінити (? <= = ) до (? <= \ ^)
барлоп

Для виключно, просто замініть на ^~.
Денніс

@ Денніс Я маю на увазі, якщо він хоче замінити все між ^ і ~, але не включаючи ^ і ~
барлоп

1
Хіба це не те , що ви отримаєте , якщо ви заміните \^[^~]*~з ^~?
Денніс

@ Денніс ой, я бачу, що ти маєш на увазі, хороший пункт.
барлоп

0

У мене була схожа вимога заміни між початковими та кінцевими символами. Це надійшло з електронної пошти з перспективою; hunderss членів, і я просто хотів, щоб імена осіб із усім, що видалено між <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 .


Це не відповідає на запитання.
Тото
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.