2015-11-20 1 views
2

У меня есть база данных адресов, где аббревиатуры разделены пробелом, я хочу удалить это пространство, поэтому я обратился к надежным регулярным выражениям. Тем не менее, я изо всех сил пытаюсь выполнить вторичную функцию по результату regexp '\ ​​&' - Я проверил форумы и документы и просто не могу заставить это работать. Пример данных у меня выглядит следующим образом:Функции на regexp_replace result в Postgres

  • 'Сварка AVC' должно быть '' AVC сварки
  • 'HSBC' должен быть 'HSBC'
  • и т.д ..

У меня есть следующее регулярное выражение:

trim(regexp_replace(organisation || ' ', '(([A-Z]\s){1}){2,}', replace('\&',' ',''), 'g')) 

replace('\&',' ','') не оказывает влияния на всех, я просто получить ту же строку обратно. Я пробовал другие функции, например. lower('\&'), и ни одна из них не работает должным образом. Конкатенация с || делает работа однако. Я попробовал лить «\ &» в текст, попробовал replace('' || '\&' || '',' ','') - все равно, без радости.

Любые советы были бы очень признательны, я уверен, что решение является чем-то очень простым, но я просто не вижу, куда идти дальше!

+0

Hi Vivek - спасибо за ваш ответ, как указано выше. Я ожидаю, что смогу преобразовать «AVC Welding» в «AVC Welding», «HSBC» в HSBC и т. Д. Ему также необходимо работать для нескольких сокращений, поэтому «PD James & HS Wilson 'должен быть «PD James & HS Wilson». Любые советы, которые вы можете предоставить, будут высоко оценены. –

+0

Итак, чтобы ограничить 'select trim (regexp_replace ('AVC Welding', '(([AZ] \ s) {1}) {2,}', заменить ('\ &', '', ''), 'g ')); 'возвращает' AVC Welding', тогда как я ожидаю 'AVC Welding' –

+0

Что именно вы хотите делать с заменой (' \ & ',' ',' ')'? Это не так. – Patrick

ответ

1

То, что вы пытаетесь сделать с \&, никогда не будет работать. Образец \& заменит весь шаблон , но вам нужно решение, которое работает на отдельных частях.

Вам нужно заменить шаблон CAPITAL-space только CAPITAL, но только если за ним следует еще один капитал, который не является старшим более длинным словом. Другими словами: вам нужен отрицательный предпросмотр и если шаблон соответствует, то замените только первый атом заменить строку:

select regexp_replace('A V C Welding', '([A-Z]){1}(\s){1}(?![A-Z][a-z])', '\1', 'g'); 

Вы можете заменить негативную картину опережения с чем-то более широким, если это необходимо (например, без заглавной буквы, цифр, знаков препинания и т. д.).

+0

Большое спасибо @Patrick, это именно то, что я искал, я раньше не использовал негативный взгляд, я обязательно буду учитывать это в будущем, еще раз спасибо, вы сделали мой день! –

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