-1

我一直在尝试将 unicode 正则表达式转换为 POSIX 正则表达式,以从列中删除、\p{So}和类型的字符。\p{Cs}\p{Cn}\x1A

在 Informatica 中,我使用reg_replace (col_name,'[\p{So}\p{Cs}\p{Cn}\x1A]',' ')函数来过滤掉这些字符并用单个空格替换它们。

但是,当迁移到 RedShift 时,无法使用相同的正则表达式,REGEXP_REPLACE()因为它不支持 Unicode 块。

例如,这是字符串:-

'INT¡®L n°1 di KONGRESSE Ê Í EUROREGIONE。V.Ž?#'

从上面的字符串中,我需要保留拉丁/法语字母、字母数字和标点符号,并删除其他符号。

4

1 回答 1

0

您可以使用

[^À-Ž[:punct:][:alnum:]]

À它匹配除to Ž、标点符号和字母数字以外的任何单个字符。如果[:alnum:]您的环境中支持 Unicode,您可以删除À-Ž.

如果您传递参数选项,您似乎仍然可以将 PCRE 正则表达式与Amazon Redshift一起使用:REGEXP_REPLACEp

REGEXP_REPLACE(col_name,'[\\p{So}\\p{Cs}\\p{Cn}\\x1A]+',' ', 1, 'p')

反斜杠需要加倍,1参数是字符串中开始匹配的位置,p选项告诉REGEXP_REPLACE使用 PCRE 正则表达式语法。

于 2022-01-11T08:47:22.430 回答