нужна помощь с postgresql regexp_replace - PullRequest
1 голос
/ 22 июля 2010

Мне нужно избавиться от конечных повторяющихся не_алфавитно-цифровых символов, таких как

"thanks ! !!!!!!!" до "thanks !"

Если эти разные символы, то они игнорируются.

Я довольно новичок в регулярных выражениях, поэтому я придумал

regexp_replace('Thanks . . . .  ', '((\\W)\\s*)(\\2\\s*)+', '\\2')

чтобы попробовать.

Однако я понимаю, что пробел после слова «спасибо» вызывает некоторые проблемы. Я бы вернулся "thanks " вместо "thanks ." Это довольно странно, потому что я использовал онлайн-инструмент регулярных выражений, а первый пробел не был найден Кто-нибудь может помочь?

примечание: я вставил двойную обратную косую черту.

Ответы [ 2 ]

2 голосов
/ 22 июля 2010

Заменить

(\W)(\s*\1)+

с

\1

Я не знаю PostgreSQL, но из вашего примера я догадываюсь:

regexp_replace('Thanks . . . .  ', '(\\W)(\\s*\\1)+', '\\1')

Это также заменит ведущие несколько пробелов одним пробелом. Если вы не хотите этого (т. Е. Если вы хотите, чтобы начальные пробелы были полностью оставлены в покое), используйте

([^\s\w])(\s*\1)+   // '([^\\s\\w])(\\s*\\1)+'

вместо.

0 голосов
/ 23 июля 2010

попробуйте так:

select regexp_replace('Thanks ! !!!!!!!!', '(\\s*)((\\W)\\s*)(\\2\\s*)+', '\\1\\2');

результат:

Thanks !
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...