Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Talend根据条件分解字符串并清理数据_Java_Talend - Fatal编程技术网

Java/Talend根据条件分解字符串并清理数据

Java/Talend根据条件分解字符串并清理数据,java,talend,Java,Talend,我有一个原始数据字符串列表。每个字符串可能包含Talend 7中的公司名称+强调地址+城市+省份。它们被管柱中的一根管子隔开 总行数为200000 我想以一种有效的方式提取和分离公司名称。问题是这条管道以公司的名义不规则存在 以下是每个字符串可以具有的一些示例: “Mackenzie Health | 10 Trench St.|里士满山L4C 4Z3” “” “健康与健康中心|多伦多大学|学院街214号,111室|多伦多M5T 2Z9” “多伦多Walmer路400号125室M5P 2X7”

我有一个原始数据字符串列表。每个字符串可能包含Talend 7中的公司名称+强调地址+城市+省份。它们被管柱中的一根管子隔开

总行数为200000

我想以一种有效的方式提取和分离公司名称。问题是这条管道以公司的名义不规则存在

以下是每个字符串可以具有的一些示例:

  • “Mackenzie Health | 10 Trench St.|里士满山L4C 4Z3”
  • “”
  • “健康与健康中心|多伦多大学|学院街214号,111室|多伦多M5T 2Z9”
  • “多伦多Walmer路400号125室M5P 2X7”
  • “患病儿童医院|重症监护医学部|多伦多大学大道555号2830室二楼中庭,M5G 1X8”
  • 我正在考虑使用tJava或tJavaRow,并编写一些java代码,使用contains方法,我可以检查字符串是否包含以下单词之一:Avenue、Ave、Road、Rd、Street和,St。除非这些单词前面有空格

    我的问题是:在找到哪个记录有街道地址后,我需要知道在街道地址之前是否存在管道,如果是,有多少管道?所以我可以将它们合并为公司名称

    示例:

    “Mackenzie Health | 10 Trench St.|里士满山L4C 4Z3”在街道地址10 Trench St.之前只有一条管道,因此公司名称为 麦肯齐健康

    “健康与健康中心|多伦多大学|学院街214号,111室|多伦多M5T 2Z9”街道地址前有两条管道,因此公司名称为: 多伦多大学健康与健康中心 “Walmer路400号|套房125 |多伦多M5P 2X7”之前没有管道,因此没有任何名称

    “患病儿童医院|重症监护医学部| 2楼中庭,2830室| 555号大学大道|多伦多M5G 1X8”前面有三个管道,但在子字符串中,前面有“房间”一词。因此,该公司的名称是病童医院重症监护医学部


    欣赏任何想法和/或新的解决方案也

    您可以在Talend例程中基于使用捕获组的模式匹配创建Java方法(可以在tMap Component或其他地方调用)

    在您的案例中,您可以使用以下RegEx示例(似乎解决了给出的5个示例):

    此正则表达式按最后一次出现(从右起)进行分组:

    我已经用计算机测试了正则表达式。第一组是您的公司名称,第二组是您的地址。可以在进一步处理中删除不需要的管道

    此正则表达式按第一次出现(从左起)进行分组:

    第2组和第4组现在有了数据

    注意:所有积分都是Mo2s的,我刚刚将他的答案从评论中复制到这里,希望它对其他人有用

    修复:正则表达式中的星号字符问题,与stackoverflow标记混淆


    希望它能对你有用。如果需要更多帮助,请告诉我。

    您可以在Talend例程中创建一个Java方法,该方法基于使用捕获组的模式匹配(可以在tMap Component或其他地方调用)

    在您的案例中,您可以使用以下RegEx示例(似乎解决了给出的5个示例):

    此正则表达式按最后一次出现(从右起)进行分组:

    我已经用计算机测试了正则表达式。第一组是您的公司名称,第二组是您的地址。可以在进一步处理中删除不需要的管道

    此正则表达式按第一次出现(从左起)进行分组:

    第2组和第4组现在有了数据

    注意:所有积分都是Mo2s的,我刚刚将他的答案从评论中复制到这里,希望它对其他人有用

    修复:正则表达式中的星号字符问题,与stackoverflow标记混淆


    希望它能对你有用。如果需要更多帮助,请告诉我。

    这是一个管道(|)分隔的字符串,用管道拆分每个字符串,形成一个对象模型/bean并填充数据。@Sambit您能解释更多吗?请注意,我使用的是Talend,因此我需要在tJavarow中编写尽可能简单的代码。例如,如果这是字符串“Mackenzie Health | 10 Trench St.| Richmond Hill ON L4C 4Z3”,则使用管道(|)将其拆分,并创建一个类,其中包含一些满足您需求的字段。类应该有getter和setter。拆分后,将数据填充到类中。这就是问题所在,Talend非常受限,不允许您在Talend组件中创建类。我通常使用的解决方案是在tMap中添加一个新字段,然后通过tFilter对管道进行计数。我不能在这里使用此解决方案,因为现在我有一个特殊条件,行数很高。这是一个管道(|)分隔的字符串,用管道拆分每个字符串,形成一个对象模型/bean并填充数据。@Sambit您能解释更多吗?请注意,我使用的是Talend,因此我需要在tJavarow中编写尽可能简单的代码。例如,如果这是字符串“Mackenzie Health | 10 Trench St.| Richmond Hill ON L4C 4Z3”,则使用管道(|)将其拆分,并创建一个类,其中包含一些满足您需求的字段。类应该有getter和setter。拆分后,将数据填充到类中。这就是问题所在,Talend非常受限,不允许您在Talend组件中创建类。我通常使用的解决方案是在tMap中添加一个新字段,然后通过tFilter对管道进行计数。我不能在这里使用这个解决方案,因为现在我有一个特殊的条件,行数很高谢谢@Mo2s我有两个问题:1-为了确保我正确理解这个(.\\)((?I)。意味着我有带0或管道的字符串,是组1,其余的是组2.2-如果我想添加Ave
    ^(.*\|)*((?i).*(room|st.|street|road|avenue).*\|(?-i).*)$
    
    ^((((?!room|street|st.|road|avenue).)*\|)|)*((?i).*(room|street|st.|road|avenue).*\|(?-i).*)$.