postgres regexp_replace хочет разрешить только az и AZ - PullRequest
25 голосов
/ 13 декабря 2010

В столбце таблицы в строке мы можем иметь числа / специальные символы / пробелы. Я хочу заменить числа / специальные символы / пробелы на пустой символ, я вижу, что есть функция с именем regexp_replace, но как использовать не очень удобную справку, например, я хочу использовать следующую строку.

String = 'abc$wanto&toremove#special~chars'

Я хочу удалить все специальные символы и числа из приведенной выше строки. Нужно разрешить только a-z и A-Z Остальные символы должны быть заменены на '' Как это сделать?

Ответы [ 5 ]

53 голосов
/ 13 декабря 2010
select regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]', '', 'g')
11 голосов
/ 29 сентября 2014

Для меня сработало следующее.

regexp_replace(code, '[^a-zA-Z0-9]+', '','g')    

Поскольку он добавляет глобальный фильтр, он повторяет регулярное выражение для всей строки.

Пример,

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '')    

Возвращает: «WellThis не работает & * ($ %%) _»

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '','g')    

Возвращает: «WellThisDidNotwork»

У которого есть символы, которые мы не хотим удалять.

8 голосов
/ 27 января 2014

Чтобы сделать это проще:

regexp_replace('abc$wanto&toremove#special~chars', '[^[:alpha:]]')
3 голосов
/ 04 марта 2015

Если вы хотите заменить символ на ближайший не специальный символ, вы можете сделать что-то вроде этого:

select
  translate(
    lower( name ), ' ''àáâãäéèëêíìïîóòõöôúùüûçÇ', '--aaaaaeeeeiiiiooooouuuucc'
  ) as new_name,
  name
from cities;
0 голосов
/ 13 декабря 2010

Должно быть:

regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]+', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...