Pentaho水壶(PDI)拆分名称

Pentaho水壶(PDI)拆分名称,pentaho,etl,kettle,Pentaho,Etl,Kettle,我如何将一个名字分为名字和姓氏 有一个splitfields转换函数,但它只按给定的分隔符拆分字段。除了在某些情况下数据将有3个名称,甚至4个名称这一事实之外,这将是可行的。因此,如果您不知道要提供多少姓名,就无法动态获取姓氏 假设输入字段FullName包含以下4行: 无名氏 约翰·多伊·史密斯 约翰·多伊·史密斯·杰克逊 约翰 拆分应按空格字符进行,输出应为: 对于所有4行,名字应该是John(显然) 但LastName输出应为: 雌鹿 史密斯 杰克逊 如果对MiddleName有要

我如何将一个名字分为名字和姓氏

有一个splitfields转换函数,但它只按给定的分隔符拆分字段。除了在某些情况下数据将有3个名称,甚至4个名称这一事实之外,这将是可行的。因此,如果您不知道要提供多少姓名,就无法动态获取姓氏

假设输入字段FullName包含以下4行:

无名氏
约翰·多伊·史密斯
约翰·多伊·史密斯·杰克逊
约翰
拆分应按空格字符进行,输出应为: 对于所有4行,名字应该是John(显然)

但LastName输出应为:

雌鹿
史密斯
杰克逊

如果对MiddleName有要求(不紧急,但有利于提供信息),则输出为:

雌鹿
不确定-如果出现这种情况,可能必须与客户澄清

此任务可以通过使用正则表达式的正则表达式求值组件来解决

^([^ ]+).*?([^ ]+)?$
第一组
([^]+)
总是选择字符串中的名字,因为开头是
^
。可选的第二组
([^]+)?
选择字符串中的姓氏,因为末尾有
$
。表达式
*?
选择介于两者之间的任何内容(包括空字符串)。请注意,它必须设置为惰性(使用“?”),以便它不会从可选的第二个组中窃取字符,该组也是惰性的,因为

测试转换如下所示

正则表达式组件的详细信息如下所示


请注意,包含全名的字符串中不能有前导空格或尾随空格。字符串操作组件Trim string会解决这个问题。

那么您希望一组名称中的姓氏用分隔符分隔为姓氏,所有其他名称连接为名字?您能否修改您的问题以包含更详细的要求?注释不适合行格式。@MarcusRickert,已更新。谢谢,现在有点清楚了。那么,如果有四个或四个以上的名字,会发生什么呢?更新为包括这样一个场景。基本上,名字和姓氏,不管有多少