如何在nifi中分割街道名称中的地址和街道编号?

时间:2019-06-06 14:25:53

标签: java regex apache-nifi

我正在尝试在街道名称和街道编号中分割给定的地址(MusterStraße114 a)。我正在与nifi合作。情况如下:我有一个FlowFile属性(order_address),它具有FlowFile内容,例如MusterStraße114a,我需要将其拆分为单独的属性。 我尝试过

 /\A\s*(?:?:\s*)?(\pN+[a-zA-Z]?(?:\s*[-\/\pP]\s*\pN+[a-zA-Z]?)*)\s*,?\s*(?P(?:[a-zA-Z]\s*|\pN\pL{2,}\s\pL)\S[^,#]*?(?<!\s))s*(?:(?:[,\/]|(?=\#))\s*(?!\s*\.(?P(?!\s).*?))? | ?:(?P.*?),\s*(?=.*[,\/]))??!\s*\.)(?P[^0-9#]\s*\S(?:[^,#](?!\b\pN+\s))*?(?<!\s))\s*[\/,]?\s*(?:\sNo[.:])?\s*(?P\pN+\s*-?[a-zA-Z]?(?:\s*[-\/\pP]?\s*\pN+(?:\s*[\-a-zA-Z])?)*|[IVXLCDM]+(?!.*\b\pN+\b))(?<!\s)\s*(?:(?:[,\/]|(?=\#)|\s)\s*(?!\s*No\.)\s*(?P(?!\s).*?))?)\s*\Z/xu

但这对我不起作用

2 个答案:

答案 0 :(得分:1)

在nifi中,您可以使用Nifi表达式语言来操纵FlowFile-Attributes。因此,我使用UpadateAttribute-Processor来创建新的FlowFile-Attributes street_name和streed_number。

我使用带有简单正则表达式的replaceAll方法来获取街道编号和街道名称。

^(\D*)(?:.*)
^\D*(.*)

这两个正则表达式做到了。

在这里找到处理器的屏幕截图:

1

答案 1 :(得分:1)

如果我们只想将地址分成两部分,一个包括数字,另一个不包括数字,我们可以找到一些涵盖该规则的表达式,例如:

(.*?)([\d].*)

Demo

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(.*?)([\\d].*)";
final String string = "Muster Straße 114 a";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

RegEx电路

jex.im可视化正则表达式:

enter image description here

相关问题