我有一個帶有復雜列分隔符的傳入記錄,需要對記錄進行標記。分隔符之一可以是資料的一部分。
我正在尋找一個正則運算式。需要在具有函式“REGEXP_SUBSTR”的 Teradata 16.1 上使用。
最多可以標記 5 列。計劃在 Teradata 中使用 case 陳述句來標記列。我想一個令牌的正則運算式會起作用。
Case#1: Column delimiter is ' - '
Sample data: On-e - tw o - thr$ee
Required output : [On-e, tw o, thr$ee]
我的嘗試:([\S]*)\s{1}\-{1}\s{1}
Case#2 : Column delimiter is '::'
Sample data : On:e::tw:o::thr$ee
Required output : [On:e, tw:o, thr$ee]
Case#3 : Column delimiter is ':;'
Sample data : On:e:;tw;o:;thr$ee
Required output : [On:e, tw;o, thr$ee]
上述 3 種情況是獨立的,不會同時發生,即需要 3 種不同的解決方案
uj5u.com熱心網友回復:
如果您絕對必須為此使用 RegEx,您可以使用捕獲組在下面顯示的示例中執行此操作。
通用示例:
/(?<data>. ?)($delimiter|$)/gm
(?<data>. ?) 命名捕獲組資料,匹配:出現一次到無限次之間
的
.任何字符,
后跟
?
($delimiter|$)另一個捕獲組,匹配: - 用匹配分隔符字串或字串結尾的
$delimiter正則運算式替換它
|
$
拿起你的例子:
情況1:
列分隔符為 ' - '
/(?<data>. ?)(\s-\s|$)/gm
(https://regex101.com/r/qMYxAY/1)
案例2:
列分隔符是 '::'
/(?<data>. ?)(\:\:|$)/gm
https://regex101.com/r/IzaAoA/1
案例#3:
列分隔符是 ':;'
(?<data>. ?)(\:\;|$)
https://regex101.com/r/g1MUb6/1
uj5u.com熱心網友回復:
通常,您會使用STRTOK分隔符來拆分字串。但是 strtok 無法處理多字符分隔符。一種適度過度復雜的方法是將分隔符的多個字符替換為單個字符并在其上拆分。例如:
select
strtok(oreplace(<your column>,' - ', '|'),'|',1) as one,
strtok(oreplace(somecol,' - ', '|'),'|',2) as two,
strtok(oreplace(somecol,' - ', '|'),'|',3) as three,
strtok(oreplace(<your column>,' - ', '|'),'|',4) as four,
strtok(oreplace(<your column>,' - ', '|'),'|',5) as five
如果只有三個出現,就像在您的示例中一樣,它只會為其他兩個回傳 null 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/451883.html
下一篇:Condition
