【问题标题】:Pentaho Kettle (PDI) Split NamesPentaho 水壶 (PDI) 拆分名称
【发布时间】:2014-05-21 11:27:03
【问题描述】:

如何将姓名拆分为 FirstName 和 LastName?

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

假设输入字段 FullName 包含以下 4 行: John Doe John Doe Smith John Doe Smith Jackson John 拆分应该是空格字符,输出应该是: 对于所有 4 行,FirstName 应该是 John(显然)

但 LastName 输出应该是: Doe Smith Jackson <null>

如果需要 MiddleName(不紧急,但对信息有用),输出将是: <null> Doe Not Sure - may have to clarify with client if that comes up <null>

【问题讨论】:

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

标签: pentaho etl kettle


【解决方案1】:

这个任务可以通过使用带有正则表达式的regex评估组件来解决

^([^ ]+).*?([^ ]+)?$

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

测试转换如下所示

正则表达式组件的细节是这样的

请注意,包含全名的字符串不得在其中包含前导或尾随空格。 字符串操作 组件 Trim String 负责处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多