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.

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 ~ .

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.


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.


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 <First1.Last1@email.com>; First2 Last2 <First2.Last2@email.com>; First3 Last3 <First3.Last3@email.com>; First4 Last4 <First4.Last4@email.com>;

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 .


To nie odpowiada na pytanie.
Toto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.