2017-06-16 82 views
1

我想從我的Redshift表中的列中拉出特殊字符(標點符號和表情符號)。我已經在這個動態測試儀被檢驗出正則表達式的功能在這裏:爲Redshift重複正則表達式

http://regexr.com

在動態測試儀這一個適用於拉非空格字符:[^a-zA-Z\s]

然而,在紅移它仍然拉空間,只拉第一個特殊字符,不管是問號還是表情符號。

根據紅移文檔,它支持的REGEXP_SUBSTR函數:http://docs.aws.amazon.com/redshift/latest/dg/REGEXP_SUBSTR.html

我在紅移以下查詢:

select 
* 
, regexp_substr(device_contact_name,'[^\sa-zA-Z]') as special_characters 
from table 

例如,如果現場有「牛!」它會返回「!」但如果該領域有「丹尼爾!」它會返回「」

如果該字段有「丹尼爾!!」我想要結果返回「!!」

關於如何從結果中正確消除空間並返回所有特殊字符的想法?

在此先感謝!

+0

它不應該返回一個空間,因爲不是由正則表達式允許的。要一次獲得超過1個,量化類'[^ \ sa-zA-Z] +' – sln

+0

請記住,在_negated_字符類中,所有項目分別爲非項目,並且每個否定項目都是_AND_Ed。 – sln

+0

謝謝大家! NetMage的解決方案適用於我遇到的問題:'[^ \\ sa-zA-Z] +' –

回答

0

反斜槓字符是默認的轉義字符,所以你應該加倍:

select * , regexp_substr(device_contact_name,'[^\\sa-zA-Z]+') as special_characters from table 
+0

謝謝NetMage!您提供的功能'[^ \\ sa-zA-Z] +'完美適用於捕捉所有特殊字符。 –