Jak usunąć wszystkie znaki spoza ASCII za pomocą wyrażenia regularnego i Notepad ++?

147

Dużo szukałem, ale nigdzie nie jest napisane, jak usunąć znaki spoza ASCII z Notepad ++.

Muszę wiedzieć, jakie polecenie wpisać w znajdź i zamień (ze zdjęciem byłoby świetnie).

  • Jeśli chcę zrobić białą listę i dodać do zakładek wszystkie słowa / linie ASCII, aby linie inne niż ASCII były odznaczone

  • Jeśli plik jest dość duży i nie można wybrać wszystkich linii ASCII, a po prostu chcesz wybrać wiersze zawierające znaki spoza ASCII ...

Texh
źródło

Odpowiedzi:

263

To wyrażenie będzie szukać wartości spoza zestawu ASCII:

[^\x00-\x7F]+

Zaznacz „Tryb wyszukiwania = wyrażenie regularne” i kliknij Find Next.

Źródło: Regex dowolny znak ASCII

ProGM
źródło
4
i na wypadek, gdyby nie było to oczywiste, jeśli usuniesz "^", wyszukujesz wiersze ASCII
Mike M
7
Działa dobrze, ale musiałem ustawić Encoding->Encode in ANSI. Nie mogłem znaleźć niczego innego.
FoamyGuy,
1
Działa doskonale w netbeans z opcją wyszukiwania wyrażeń regularnych (przycisk-gwiazdka)
Teson,
działa w kodzie VS, nie zapomnij kliknąć opcji wyszukiwania Regex!
yashhy,
4
Jeśli chcesz zachować \ r i \ n - znak powrotu karetki i wysuwu wiersza - możesz użyć tego wyrażenia regularnego: [\ x00- \ x09 \ x0B- \ x0C \ x0E- \ x1F] +
Steffen Winkler
53

W Notepad ++, jeśli przejdziesz do menu WyszukajZnajdź znaki w zakresieZnaki spoza ASCII (128-255) , możesz przejść przez dokument do każdego znaku spoza ASCII.

Pamiętaj, aby zaznaczyć opcjęZawijaj ”, jeśli chcesz zapętlić dokument dla wszystkich znaków spoza zestawu ASCII.

zrzut ekranu „Znajdź w zasięgu”

Anon Y. Mous
źródło
3
Działa to dobrze, ale nie wyświetla wszystkich wyników na liście i nie ma opcji „zastąp”
Alex,
Sprytnie ... ponieważ zawsze zapominam o wyrażeniu regularnym dla nie-ASCII i za każdym razem muszę go wygooglować, aby wrócić do tej strony :)
Jean-Francois T.
27

Oprócz odpowiedzi udzielonej przez ProGM, w przypadku, gdy widzisz znaki w polach typu NUL lub ACK i chcesz się ich pozbyć, są to znaki kontrolne ASCII (od 0 do 31), możesz je znaleźć za pomocą następującego wyrażenia i usunąć:

[\x00-\x1F]+

Aby usunąć wszystkie znaki sterujące spoza ASCII ORAZ ASCII, należy usunąć wszystkie znaki pasujące do tego wyrażenia regularnego:

[^\x1F-\x7F]+
brunorey
źródło
Wartości od \x00i \x1Fsą już dopasowane w odpowiedzi przez ProGM.
Unihedron
2
Są dopasowywane jako wartości, które chcesz zachować. Sugerowałem to tylko na wypadek, gdybyś chciał się ich pozbyć.
brunorey
Ostatni przykład powinien zaczynać się od 20, aby wykluczyć znak separatora jednostek. Może wykluczyć 7F, jak również jest to postać kontrolna.
fgb
Znakomity! Usunąłem wszystkie nieznośne znaki spoza ASCII używając pakietu qdap R używając:mgsub("[^\x1F-\x7F]+", "", text_vector, fixed = FALSE)
Pablo Adames
22

Aby usunąć wszystkie znaki spoza zestawu ASCII, możesz użyć następującego zamiennika: [^\x00-\x7F]+

Usuwanie spoza ASCII

Aby podświetlić znaki, polecam użycie funkcji Mark w oknie wyszukiwania: powoduje to podświetlenie znaków spoza zestawu ASCII i umieszczenie zakładki w wierszach zawierających jeden z nich

Jeśli zamiast tego chcesz podświetlić i umieścić zakładkę na znakach ASCII, możesz użyć do tego wyrażenia regularnego [\x00-\x7F].

Podświetlanie spoza ASCII

Twoje zdrowie

Jean- Francois T.
źródło
1
jeśli chcesz skopiować wyrażenie wyszukiwania [^ \ x00- \ x7F] +
hiena
2
Jeśli chcesz zachować \ r i \ n - znak powrotu karetki i wysuwu wiersza - możesz użyć tego wyrażenia regularnego: [\ x00- \ x09 \ x0B- \ x0C \ x0E- \ x1F] +
Steffen Winkler
4

Aby zachować nowe wiersze:

  1. Najpierw wybierz znak dla nowej linii ... Użyłem #.
  2. Wybierz opcję zamiany, rozszerzoną.
  3. wejście \ n zamień na #
  4. Hit Zamień wszystko

Kolejny:

  1. Wybierz opcję Zastąp opcję Wyrażenie regularne.
  2. Wpisz to: [^ \ x20- \ x7E] +
  3. Zachowaj zamień na puste
  4. Hit Zamień wszystko

Teraz wybierz opcję Zamień Rozszerzony i Zamień # na \ n

:) teraz masz czysty plik ASCII;)

TooGeeky
źródło
3

Kolejną dobrą sztuczką jest przejście do trybu UTF8 w edytorze, abyś mógł zobaczyć te zabawne postacie i samodzielnie je usunąć.

Gidon Wise
źródło
1

Inny sposób...

  1. Zainstaluj wtyczkę Text FX, jeśli jeszcze jej nie masz
  2. Przejdź do opcji menu TextFX -> zamień wszystkie niedrukowalne znaki na #. Zastąpi wszystkie nieprawidłowe znaki 3 symbolami #
  3. Przejdź do Znajdź / Zamień i poszukaj ###. Zastąp go spacją.

Jest to miłe, jeśli nie pamiętasz wyrażenia regularnego lub nie chcesz go sprawdzać. Ale wyrażenie regularne wspomniane przez innych jest również dobrym rozwiązaniem.

goku_da_master
źródło
Zapping wszystkich znaków zamienia wszystkie rodzaje znaków interpunkcyjnych na ###. Rozwiązanie, którego bym się spodziewał, to: Zastąpienie „&” przez „. Zastępowanie„ & ”przez„. Itd.
Kasim Husaini
Działa dobrze, jednak narzędzie zastępuje śmieszne znaki jednym znakiem #, a nie trzema. proszę Zanotuj.
Raghav
1
Wtyczka Text FX jest przestarzała i może nawet nie być już łatwo dostępna. Zobacz np. TextFX's Future - „Kiedy lista się
Peter Mortensen