Как я могу разделить адрес в названии улиц и номер улицы в нифи? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь разделить данный адрес (Muster Straße 114 a) по названию улицы и номеру улицы. Я работаю с нифи. Ситуация следующая: у меня есть FlowFile-Attribute (order_address), который имеет FlowFile-контент, например, Muster Straße 114a, и мне нужно разделить его на отдельные атрибуты. Я пытался

 /\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 ]

1 голос
/ 07 июня 2019

Если бы мы хотели просто разделить наши адреса на две части, одну с цифрами, а другую без, мы могли бы найти несколько выражений, которые бы охватывали это правило, например:

(.*?)([\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));
    }
}

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

1 голос
/ 07 июня 2019

В nifi вы можете использовать язык выражений Nifi для управления атрибутами FlowFile.Поэтому я использовал UpadateAttribute-Processor, чтобы создать новые FlowFile-Attributes street_name и streed_number.

Я использовал метод replaceAll с простым регулярным выражением, чтобы получить streetnumber и streetname.

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

Это два регулярных выражения сделали это.

Здесь вы найдете скриншот процессора:

1

...