我正在尝试在街道名称和街道编号中分割给定的地址(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
但这对我不起作用
答案 0 :(得分:1)
在nifi中,您可以使用Nifi表达式语言来操纵FlowFile-Attributes。因此,我使用UpadateAttribute-Processor来创建新的FlowFile-Attributes street_name和streed_number。
我使用带有简单正则表达式的replaceAll方法来获取街道编号和街道名称。
^(\D*)(?:.*)
^\D*(.*)
这两个正则表达式做到了。
在这里找到处理器的屏幕截图:
答案 1 :(得分:1)
如果我们只想将地址分成两部分,一个包括数字,另一个不包括数字,我们可以找到一些涵盖该规则的表达式,例如:
(.*?)([\d].*)
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));
}
}
jex.im可视化正则表达式: