Я хочу преобразовать такой текст с помощью Snowflake SQL:
A very(!) punctuated sentence! A complicated/confusing regex.
в это:
'A very ( ! ) punctuated sentence ! A complicated / confusing regex . '
Двойные пробелы между пунктуацией - это нормально, потому что я могу сделать второй проход чтобы сжать пробелы. Список пунктуации:
.,&-_()[]{}-/:;%$@!*|?~=+"\'
Но если есть стандартный ярлык для всех знаков препинания, я бы подумал об этом. Я видел ответов , которые используют Java регулярное выражение, которое использует \p{Punct}
. Но в своих тестах я не могу использовать идентификатор пунктуации и не вижу его в документации Snowflake.
У меня есть рабочая версия, от которой у меня текут глаза, и она даже не полностью выписана:
select regexp_replace(
'a very(!) punctuated sentence! A complicated/confusing regex?.',
'(\\(|\\)|\\/|!|\\?)', -- only addresses (), /, !, ?, not the full list
' \\1 '
) as "result" from table
result: "a very ( ! ) punctuated sentence ! A complicated / confusing regex ? ."
По какой-то причине нет двойных пробелов, что заставляет меня сомневаться в результате, а также в удобочитаемости реализации.
Насколько я понимаю, классы символов более производительны и их проще визуально анализировать. Но это не работает:
select regexp_replace(
'a very(!) punctuated sentence! A complicated/confusing regex?.',
'[.,&-_()[]{}-/:;%$@!*|?~=+"\'`]',
' \\1 '
) as "result" from table
-- Error: no argument for repetition operator: ?
Также не похоже, что обратные ссылки доступны для классов символов.
Есть ли способ написать этот запрос, который является относительно производительным и позволяет читателю легко визуально анализировать список знаков препинания, например, в классах символов выше?