2017-01-12 2 views
0

Я пытаюсь удалить ведущие специальные символы (может быть - "$ &^@ _). из "Persi és Levon Cnatówóeez с помощью ульяУдаление ведущих специальных символов в улье

select REGEXP_REPLACE('“Persi és Levon Cnatówóeez', '[^a-zA-Z0-9]+', '') , но это снимает все специальные символы

.

Я ожидаю результат, похожий на

Persi és Levon Cnatówóeez

+0

Этот вопрос касается ** регулярных выражений **, а не о Hive или SQL. Соответственно измените теги. –

+0

И, кстати, вы можете привязать свое выражение к * началу * входного текста с помощью * cart * ie '^ [^ a-zA-Z0-9] +' Обратите внимание, что у каретки разные значения при запуске RegEx и когда он запустит список символов в скобках. –

ответ

0

Попробуйте это:

select REGEXP_REPLACE('"Persi és Levon Cnatówóeez', '[^a-zA-Z0-9\u00E0-\u00FC ]+', ''); 

Я попробовал его на улей и он заменяет любой символ, который не является буквой (A-Za-Z) ряд (0-9) или акцентированный характер (\ u00E0 - \ u00FC).

0: jdbc:hive2://localhost:10000> select REGEXP_REPLACE('"Persi és Levon Cnatówóeez', '[^a-zA-Z0-9\u00E0-\u00FC ]+', ''); 
+----------------------------+--+ 
|   _c0    | 
+----------------------------+--+ 
| Persi és Levon Cnatówóeez | 
+----------------------------+--+ 
1 row selected (0.104 seconds) 
0: jdbc:hive2://localhost:10000> 
0

Из документации улей:

REGEXP_REPLACE (строка INITIAL_STRING, строка шаблон, строка ЗАМЕНА)

Возвращает строку, в результате замены всех подстрок в INITIAL_STRING, которые соответствуют Java синтаксиса регулярных выражений, определенному в модели с экземплярами ЗАМЕНЫ. Например, regexp_replace («foobar», «oo | ar», «») возвращает «fb». Обратите внимание, что при использовании предопределенных классов символов необходимо соблюдать осторожность: используя '\ s', поскольку второй аргумент будет соответствовать букве s; '\ S' необходимо соответствовать пробельному и т.д.

Ссылка: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

Вы должны сделать что-то вроде этого:

select REGEXP_REPLACE('“Persi és Levon Cnatówóeez', '^[\!-\/\[-\`]+', '') 

Я не Hive права знать, чтобы попробовать этот код , но идея должна быть правильной. Во втором поле вы должны поместить то, что хотите заменить, а не то, что вы хотите сохранить в своей строке. В этом конкретном случае это должно удалить (заменить пустой строкой) каждый последующий символ в начале строки, находящийся в диапазоне от! на/или в диапазоне [на `обращение к таблице ASCII.

Смежные вопросы