Удалить пунктуацию, но не все - PullRequest
2 голосов
/ 22 января 2020

Я работаю над удалением знаков препинания из текстовой переменной, которая может быть фазовой, и т. Д. c.

Пример: Привет, я ламу Хуан! Hoy es día camión.

Код, который я использую:

REGEXP_REPLACE(text, '[^0-9A-Za-z ]+', '')

Обычно это работает хорошо. Проблема в том, что в некоторых языках мы имеем пунктуацию над некоторыми словами. Пример: día camión. При запуске приведенного выше кода, выход для этих слов "da" "camin". Он удаляет букву, связанную с пунктуацией.

Есть ли способ избежать этого?

Спасибо!

1 Ответ

1 голос
/ 22 января 2020

Есть два варианта:

  • Использовать одно из многих свойств Юникода. Например, \ p {L} соответствует любой букве Юникода из любого языка - в этом случае вы можете заставить его работать с [^0-9p\{L} ]+. Существует много различных свойств Unicode, а также различий между вкусами Regex, поэтому я рекомендую изучить эту ссылку для справки.
  • Если решение, описанное выше, не работает для вас, укажите список c Коды Unicode, которым вы хотите соответствовать. Например, í можно сопоставить с \ u00ED, ó можно сопоставить с \ u00F3, поэтому для этого примера [^ \ w \ u00ED \ u00F3] + подойдет. Существует множество ссылок на Юникод, например , этот , который вы можете использовать.

Кроме того, \ w имеет то же значение, что и [0-9a-z_A-Z ], и \ W возвращает все символы, не соответствующие \ w, поэтому вы можете заменить эту часть выражения, то есть [\ W] + вместо того, что вы изначально написали. \ W не уменьшает проблему Unicode - это вопрос читаемости и простоты.

...