Як видалити всі символи, що не належать до ASCII, за допомогою регулярного вираження та блокнота ++?


147

Я багато шукав, але ніде не написано, як видалити символи, що не належать до ASCII, із Notepad ++.

Мені потрібно знати, яку команду написати в пошуку та заміні (із зображенням це було б чудово).

  • Якщо я хочу скласти білий список і встановити закладку всіх слів / рядків ASCII, щоб рядки, що не належать до ASCII, були відмічені

  • Якщо файл досить великий і не може вибрати всі рядки ASCII і просто потрібно вибрати рядки, що містять символи, що не належать до ASCII ...

Відповіді:


263

Цей вираз буде шукати не-ASCII значення:

[^\x00-\x7F]+

Поставте прапорець "Режим пошуку = Регулярний вираз" та натисніть Find Next.

Джерело: Regex будь-який символ ASCII


4
і на випадок, якщо це не очевидно, якщо ви видалите "^", ви шукаєте рядки ASCII
Mike M

7
Добре працює, але мені довелося ставити Encoding->Encode in ANSI. Не вдалося знайти нічого іншого.
FoamyGuy

1
Відмінно працює в мережах з його опцією пошуку regexp (кнопка зірочка)
Teson

працює у VS-коді, не забудьте натиснути параметр пошуку Regex!
яши

4
Якщо ви хочете зберегти \ r і \ n - символи повернення каретки та передачі ліній, ви можете скористатися цим регулярним виразом: [\ x00- \ x09 \ x0B- \ x0C \ x0E- \ x1F] +
Steffen Winkler

53

У Блокноті ++, якщо ви перейдете до меню ПошукЗнайти символи в діапазоніСимволи, які не належать до ASCII (128-255), ви можете потім перейти через документ до кожного символу, який не є ASCII.

Обов’язково поставте галочку " Обернути навколо ", якщо ви хочете зафіксувати в документі всі символи, що не належать до ASCII.

скріншот "Знайти в діапазоні"


3
Це працює добре, але не відображає всіх результатів у списку і не має можливості замінити
Алекс

Акуратно ... тому що я завжди забуваю регулярний вираз для не-ASCII і доводиться йому Google кожного разу повертатися на цю сторінку :)
Жан-Франсуа Т.

27

На додаток до відповіді ProGM, якщо ви бачите символи в полях типу NUL або ACK і хочете їх позбутися, це символи управління ASCII (від 0 до 31), ви можете знайти їх із наступним виразом і видалити їх:

[\x00-\x1F]+

Щоб видалити всі контрольні символи, що не належать до ASCII та ASCII, слід видалити всі символи, відповідні цьому регексу:

[^\x1F-\x7F]+

Значення \x00та \x1Fвже узгоджені у відповіді ProGM.
Уніхедрон

2
Вони співпадають із значеннями, які ви хочете зберегти. Я просто пропонував це, якщо ви хочете їх позбутися.
брунорей

Останній приклад повинен починатися з 20, щоб виключити символ розділювача одиниць. Можливо, виключіть 7F, а також це контрольний символ.
fgb

Блискуче! Я видалив усі примхливі символи, що не належать до ASCII, використовуючи пакет qdap R, використовуючи:mgsub("[^\x1F-\x7F]+", "", text_vector, fixed = FALSE)
Pablo Adames,

22

Щоб видалити всі символи, що не належать до ASCII, ви можете скористатися такою заміною: [^\x00-\x7F]+

Видалення не-ASCII

Щоб виділити символи, рекомендую використовувати функцію Позначити у вікні пошуку: це виділяє символи, що не належать до ASCII, та розміщує закладку в рядках, що містять один із них

Якщо ви хочете виділити та поставити закладку на символи ASCII, замість цього можете скористатися регулярним виразом [\x00-\x7F].

Виділення не-ASCII

Ура


1
якщо ви хочете скопіювати вираз пошуку [^ \ x00- \ x7F] +
гієна

2
Якщо ви хочете зберегти \ r і \ n - символи повернення каретки та передачі ліній, ви можете скористатися цим регулярним виразом: [\ x00- \ x09 \ x0B- \ x0C \ x0E- \ x1F] +
Steffen Winkler

4

Щоб зберегти нові рядки:

  1. Спочатку виберіть символ для нового рядка ... Я використовував #.
  2. Виберіть варіант заміни, розширений.
  3. введіть \ n замініть на #
  4. Натисніть Замінити всіх

Далі:

  1. Виберіть параметр Замінити регулярне вираження.
  2. Введіть це: [^ \ x20- \ x7E] +
  3. Тримайте заміну порожнім
  4. Натисніть Замінити всіх

Тепер виберіть параметр Замінити розширений і замініть # на \ n

:) тепер у вас є чистий файл ASCII;)


3

Ще одна гарна хитрість - перейти в режим UTF8 у своєму редакторі, щоб ви могли насправді побачити цих кумедних персонажів та видалити їх самостійно.


1

Інший спосіб...

  1. Встановіть плагін Text FX, якщо у вас його ще немає
  2. Перейдіть до пункту меню TextFX -> запамповуйте всі символи, що не друкуються, до #. Він замінить усі недійсні символи 3 # символами
  3. Перейдіть до пошуку / заміни та шукайте ###. Замініть його пробілом.

Це добре, якщо ви не можете згадати регулярний вираз або не хочете його шукати. Але регекс, згаданий іншими, також є приємним рішенням.


Переміщення всіх символів замінює всі типи розділових знаків на ###. Я б очікував такого рішення: Заміна "&" на ". Заміна" & "на" тощо.
Kasim Husaini

Це прекрасно працює, проте інструмент замінює забавні символи одним # char, а не трьома. будь ласка занотуй.
Рагхав

1
Плагін Text FX застарілий і може бути навіть недоступним. Дивіться, наприклад , майбутнє TextFX - "Коли список зростатиме досить довго, стане практичним прощатися зі старим робочим конем, який добре служив громаді".
Пітер Мортенсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.