使用Nifi ExtractText处理器使用正则表达式从流文件内容中提取匹配项(使用多种捕获模式)后,您将获得一系列数字升序属性。例如。 date,date.0,date.1,date.2,...表示整个文本中的多个捕获。
我想要的是单个属性$ {dates},其中包含捕获的每个条目。有人可以帮忙吗?
(Nifi v1.5.0)
答案 0 :(得分:1)
使用更新属性处理器 使用表达式语言添加新属性
<强>日期:强>
${allMatchingAttributes("date.*"):join(",")}
此表达式将所有日期,日期0,日期1,日期2和日期属性添加到流文件中。
更多参考: -
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#join
答案 1 :(得分:0)
date.0
属性是您可能感兴趣的内容。
例如,我使用GenerateFlowFile
处理器创建了包含文本This is a message generated at ${now():format('yyyy/MM/dd HH:mm:ss.SSS Z')}
的流文件,这将导致内容如This is a message generated at 2018/02/21 09:25:16.832 -0800.
然后我使用ExtractText
处理器和一个名为date
的新属性,其中包含以下正则表达式:(\d{4}/\d{2}/\d{2}) (\d{2}:\d{2}:\d{2}\.\d{3}) .?\d{4}
您可以看到它有两个捕获组 - 一个用于年/月/日部分和一个小时/分钟/秒/毫克部分。
运行ExtractText
后,结果就是这样。您可以看到各个捕获组位于date.1
和date.2
中,但date.0
包含整个正则表达式匹配。
--------------------------------------------------
Standard FlowFile Attributes
Key: 'entryDate'
Value: 'Wed Feb 21 09:25:16 PST 2018'
Key: 'lineageStartDate'
Value: 'Wed Feb 21 09:25:16 PST 2018'
Key: 'fileSize'
Value: '62'
FlowFile Attribute Map Content
Key: 'date'
Value: '2018/02/21'
Key: 'date.0'
Value: '2018/02/21 09:25:16.832 -0800'
Key: 'date.1'
Value: '2018/02/21'
Key: 'date.2'
Value: '09:25:16.832'
Key: 'filename'
Value: '813454866687188'
Key: 'firstName'
Value: 'Andy'
Key: 'fullName'
Value: ' '
Key: 'lastName'
Value: 'LoPresto'
Key: 'path'
Value: './'
Key: 'uuid'
Value: '9e5de17c-2d62-401e-ad13-d49adf5fdd85'
--------------------------------------------------
This is a message generated at 2018/02/21 09:25:16.832 -0800.
答案 2 :(得分:0)
您可以使用getDelimitedField表达式语言获取这些值。
如果要捕获流文件内容,请使用ExtractText处理器,在其自身中创建具有以下正则表达式的新属性。
FileSystem.downloadAsync(
attachment.imageUrl,
FileSystem.cacheDirectory + attachment.fileName
)
如果您有以下内容
dates:(.*)
它将存储在名为日期的属性中,您可以通过 $ {dates}
在流程中使用它如果你想让这些值使用下面的表达式,那就是自我。
使用更新属性来捕获如下所示的值。
1,Hi,23,001
您可以像ID :${dates:getDelimitedField(1)}
Name:${dates:getDelimitedField(2)}
Age:${dates:getDelimitedField(3)}
希望这对你有用。