Java/Talend根据条件分解字符串并清理数据
我有一个原始数据字符串列表。每个字符串可能包含Talend 7中的公司名称+强调地址+城市+省份。它们被管柱中的一根管子隔开 总行数为200000 我想以一种有效的方式提取和分离公司名称。问题是这条管道以公司的名义不规则存在 以下是每个字符串可以具有的一些示例: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例程中基于使用捕获组的模式匹配创建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).*)$.