我需要清理Teradata中的名称字段。一些条目很好:
其他人也有数字,分号和英镑/哈希:
第二组示例是我需要清除的示例,但是在姓和名之间以及中间首字母后的句点之间保留逗号。
我假设我需要REGEX_REPLACE,但是找不到我想要做的事的例子。
答案 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*(.+)
jex.im可视化正则表达式:
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}`);
});
}