NiFi:抓取多个正则表达式匹配项(使用ExtractText转换为属性吗?)

时间:2019-01-25 01:12:44

标签: apache-nifi

我正在处理的示例:

<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>,这很好用,但是如果没有int main(int argc, char* argv[]){ DIR* d; struct dirent* dir; char* surname = "Surname"; char* name = NULL; d=opendir("."); if(d){ while((dir=readdir(d))!=NULL){ name = realloc(name, strlen(d->name)+1); // Needs to be one char longer // to account for the null terminator. strcpy(name,dir->d_name); printf("%s\n",name); } free(name); clode(dir); } return 0; } ,它的作用远超过结束标记。我已经进行了大量的谷歌搜索,但似乎无法找到一种方法。我是否丢失了某些内容,还是需要获取常规脚本来执行此处的所有处理?

注意:我稍后将使用这些文件名进行进一步处理。

谢谢!

1 个答案:

答案 0 :(得分:0)

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...