Znajdź i zamień tekst między ^ a ~ w Notepad ++

22

Mam duży plik tekstowy, w którym chcę usunąć cały tekst między symbolem ^ a symbolem ~. To również musi działać w poprzek linii.

Próbowałem zrobić zwykłe Znajdź i Zamień, używając ^*~w polu Znajdź i nic w polu Zamień, ale znaleziono 0 wyników.

Splendor
źródło

Odpowiedzi:

24

Nie jest to możliwe przy zwykłym wyszukiwaniu i zamianie . Jeśli używasz Notepad ++ 6, możesz skorzystać z nowego silnika regex, który obsługuje PCRE ( źródło ).

Naciśnij Ctrl+, Haby otworzyć okno dialogowe Znajdź i zamień i wykonaj następujące czynności:

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

Teraz naciśnij Alt+, Aaby zastąpić wszystkie wystąpienia.

Wyrażenie regularne w Znajdź, co składa się w następujący sposób:

  • \^jest dosłowne ^ .
  • .*? to najmniejsza liczba znaków, która pozwala dopasować wyrażenie regularne.
  • ~jest dosłowne ~ .
Dennis
źródło
3
jeśli zmienisz. *? ~ na [^ ~] * ~, to powinno działać bez konieczności / używania PCRE.
barlop
1
@barlop: Używałem regularnie funkcji Znajdź i zamień jako Tryb wyszukiwania: Normalny , a nie Znajdź i zamień, używając wyrażeń regularnych. To mogło być nieporozumienie. W każdym razie, jeśli dobrze pamiętam, wersje wcześniejsze niż 6 nie obsługiwały wzorców wieloliniowych.
Dennis
.*?Wzór pracował dla mnie, aby szukać między znakami ;i <. Tak więc wyszukiwanie to ZNAJDŹ ;.*?<ZAMIEŃ ;z wybranymi opcjami dla Regular expressioni. matches new line
SherlockSpreadsheets
8

Będziesz chciał szukać \^.*?~i się upewnić . dopasowuje nowy wiersz jest włączony:

wprowadź opis zdjęcia tutaj

Jest tak, ponieważ ^ma specjalne znaczenie, pasuje do początku linii. Dlatego musimy uciec przed odwrotnym ukośnikiem \^.

Pisanie ^*pasowałoby do „dowolnej liczby początków wiersza z rzędu”. .*dopasowuje „dowolny znak”, ale domyślnie nie pasuje do nowego wiersza.

Der Hochstapler
źródło
2
Uważaj na chciwe zachowanie wyrażenia regularnego. Jeśli jest wiele ~znaków (lub np. Wiele dopasowań), dopasuje to od pierwszego ^do końca ~.
heavyd
@heavyd <question> Jesteś pewien? </question>. Użył, *?że nie jest chciwy, to leniwe .*?~nigdy nie będzie pasowało do więcej niż jednego ~. Więc jest ok.
barlop
@barlop: Skomentował krótko po tym, jak odpowiedziałem. To była edycja ninja.
Der Hochstapler,
2

Spróbuj użyć tego wyrażenia regularnego w sekcji znajdowania, \^[^~]*~ aby zamienić wszystko między ^ i ~ włącznie.

barlop
źródło
i wyłącznie, to przypuszczam, że to wymaga PCRE, a następnie zrób coś (? <= ^) [^ ~] * (? = ~) Nie mam n ++, aby to przetestować, ale jeśli próba się nie powiedzie (? <= ^ ) do (? <= \ ^)
barlop
Wyłącznie, po prostu zamień na ^~.
Dennis
@Dennis Mam na myśli, czy chce zastąpić wszystko między ^ a ~, ale nie wliczając ^ i ~
barlop
1
Czy to nie to, co dostajesz, jeśli zastąpi \^[^~]*~się ^~?
Dennis
@Dennis oh rozumiem, o co ci chodzi, dobra uwaga.
barlop
0

Miałem podobne wymaganie MIĘDZY zamienianiem znaków początkowych i końcowych. Pochodzi z wiadomości e-mail programu Outlook; setki członków i chciałem tylko nazwiska osób ze wszystkim usuniętym między <RemoveTextHere> .

Oryginalny

First1 Last1 <[email protected]>; First2 Last2 <[email protected]>; First3 Last3 <[email protected]>; First4 Last4 <[email protected]>;

Dennis był bliski mojemu rozwiązaniu, Find what: \^.*?~ale musiałem zmienić swoje dosłowne znaki, Find what: \<.*?>a potem musiałem usunąć pierwszy ukośnik Find what: <.*?>.

Zaktualizowano Find what: <.*?> ; Zastąp pusty.

First1 Last1 ; First2 Last2 ; First3 Last3 ; First4 Last4

_

Znaki szczególne : *, $, \, +, ^, (i ), [, ], {i}

Znaki specjalne są opisane przez Jerry'ego Jeremiaha tutaj /programming/37742519/notepad-wildcard .

Arkusze Sherlocka
źródło
To nie odpowiada na pytanie.
Toto