Teradata-删除数字和某些标点符号,保留alpha和其他标点符号

时间:2019-06-14 21:16:34

标签: regex teradata

我需要清理Teradata中的名称字段。一些条目很好:

  • Belcher,鲍勃X。
  • Belcher,琳达·A。
  • Pesto,Jimmy Z。

其他人也有数字,分号和英镑/哈希:

  • 372; #Fishoder,卡尔文·Z。
  • 5907;#Fishoder,Felix W。
  • 43; #Francisco,Teddy A。

第二组示例是我需要清除的示例,但是在姓和名之间以及中间首字母后的句点之间保留逗号。

我假设我需要REGEX_REPLACE,但是找不到我想要做的事的例子。

2 个答案:

答案 0 :(得分:2)

Regexp_replace是您的朋友在这里。您可以通过将多个字符放在方括号内来替换它们。因此,如果要替换#;或任何数字字符:

select
regexp_replace('AB,;#123','[;#0-9]','',1,0,'i')

在这个可爱的示例中,您将获得AB,。我们已经删除了分号和数字。

使用您的示例之一运行它:

select
regexp_replace('372;#Fishoder, Calvin Z.','[;#0-9]','',1,0,'i')

还给我们 Fishoder, Calvin Z.

答案 1 :(得分:1)

在这里,我们可能要从左边界[A-Z]开始,然后收集姓氏,后跟逗号,以及字符串的其余部分,其表达式类似于:

(([A-Z].+)?,)\s*(.+)

Demo

RegEx电路

jex.im可视化正则表达式:

enter image description here

捕获组

const regex = /(([A-Z].+)?,)\s*(.+)/gm;
const str = `372;#Fishoder, Calvin Z.
5907;#Fishoder, Felix W.
43;#Francisco, Teddy A.
Belcher, Bob X.
Belcher, Linda A.
Pesto, Jimmy Z.`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}