NiFi: захват нескольких совпадений регулярных выражений (в атрибут с использованием ExtractText?) - PullRequest
0 голосов
/ 25 января 2019

Пример того, что я обрабатываю:

<doc_filename>file1.docx</doc_filename>
...other data...
<doc_filename>file2.ppx</doc_filename>
...other data...
...more doc_filenames...

Мне нужно извлечь то, что находится между <doc_filename></doc_filename>. Моя текущая попытка - использовать ExtractText со строкой регулярного выражения:

[<][d][o][c][_][f][i][l][e][n][a][m][e][>](.*<)[/][d][o][c][_][f][i][l][e][n][a][m][e][>].*

Это прекрасно работает, если есть только один <doc_filename>, но захватывает далеко за закрывающий тег, если нет. Я много гуглил и не могу найти способ сделать это. Я что-то упустил, или мне нужно получить отличный сценарий для выполнения всей обработки здесь?

Примечание: я использую эти имена файлов позже для дальнейшей обработки.

Спасибо!

1 Ответ

0 голосов
/ 26 января 2019

На процессоре ExtractText установите Включить группу захвата 0 на false, Включите повторяющуюся группу захвата на true и предоставьте динамическое свойство (щелкните + 'в правом верхнем углу) с именем свойства doc_filename (или любым другим) и значением (?<=<doc_filename>)(.*?)(?=</doc_filename>).

Регулярное выражение работает следующим образом:

(?<=<doc_filename>) // Look-behind group to require opening tag
(.*?)               // Capture any characters, lazily
(?=</doc_filename>) // Look-ahead group to require closing tag

Результирующий вывод (на основе предоставленного вами примера ввода) будет:

2019-01-25 13:15:55,379 INFO [Timer-Driven Process Thread-5] o.a.n.processors.standard.LogAttribute LogAttribute[id=01681000-d047-1f22-14da-f93157703ba1] logging for flow file StandardFlowFileRecord[uuid=6908e84b-182d-4ffc-95e4-2efe5af00911,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1548450895799-1, container=default, section=1], offset=1233, length=137],offset=0,name=6908e84b-182d-4ffc-95e4-2efe5af00911,size=137]
--------------------------------------------------
Standard FlowFile Attributes
Key: 'entryDate'
    Value: 'Fri Jan 25 13:15:55 PST 2019'
Key: 'lineageStartDate'
    Value: 'Fri Jan 25 13:15:55 PST 2019'
Key: 'fileSize'
    Value: '137'
FlowFile Attribute Map Content
Key: 'doc_filename'
    Value: 'file1.docx'
Key: 'doc_filename.1'
    Value: 'file1.docx'
Key: 'doc_filename.2'
    Value: 'file2.ppx'
Key: 'filename'
    Value: '6908e84b-182d-4ffc-95e4-2efe5af00911'
Key: 'path'
    Value: './'
Key: 'uuid'
    Value: '6908e84b-182d-4ffc-95e4-2efe5af00911'
--------------------------------------------------
<doc_filename>file1.docx</doc_filename>
...other data...
<doc_filename>file2.ppx</doc_filename>
...other data...
...more doc_filenames...
...