如何从 Apache Nifi 的属性中提取名称目录?

How can I extract the name directories from an attribute in Apache Nifi?

如何在 Apache Nifi 中提取名称目录? 我想从流文件的 'absolute-path' 属性中提取名称,并将其保存为同一流文件的属性。

例如:absolute.path 的值为“C:\Users_SEG19” 并将它们放入新属性中,例如:year= 2019, time=01_SEG

我尝试使用“UpdateAttribute”中的 replaceAll 函数从“absolute.path”中提取信息,但无法识别带有 () 的我组。我不知道如何在 NiFi 中操作正则表达式中的组和 NiFi 中的属性。 例如,我想删除目录的最后两个名称,但是没有用。

${'absolute.path':replaceAll('(\[0-9]{2}_SEG)(\([0-9]{4}\/)$)','')}

这个表达式适用于任何 Java 正则表达式,但这里不行。 如果我尝试这样的事情:

time = ${"absolute.path":replaceFirst(".*\(.*)\\d{4}", "")}

有如下错误: Error

UpdateAttribute processor allows arbitrary new/existing attributes to have values assigned from regular expression parsing 通过其他属性的表达式语言。您的场景示例:

现有属性absolute.path = "C:\Users_SEG19"

为以下项添加动态属性:

  • 时间 = ${"absolute.path":replaceFirst(".+\\(\w+)\\\d{4}", "")}
  • = ${"absolute.path":replaceFirst(".*(\d{4})$", "")}

生成的流文件将具有以下属性:

  • absolute.path = "C:\Users_SEG19"
  • 时间 = "01_SEG"
  • 年份 = "2019"

表达式中属性 absolute.path 周围的额外引号是因为它包含一个 . 字符。

更新

由于 Windows 斜杠的方向,斜杠转义需要加倍。

</code> 在正则表达式中引用“组 1”,因此我们<em>提取</em> 组中包含的任何内容,然后<em>替换</em> 整个匹配(整个原始值)与组的内容。</p> <p>如果您希望两者的表达式相同,您可以指定一个包含两个组的表达式,并将其替换为一个属性的 <code> 和另一个属性的 </code>。</p> <p>刚才本地环境中运行的输出:</p> <pre><code>-------------------------------------------------- Standard FlowFile Attributes Key: 'entryDate' Value: 'Wed Oct 07 10:37:39 PDT 2020' Key: 'lineageStartDate' Value: 'Wed Oct 07 10:37:39 PDT 2020' Key: 'fileSize' Value: '0' FlowFile Attribute Map Content Key: 'absolute.path' Value: 'C:\Users_SEG19' Key: 'filename' Value: 'b16c325e-6d21-4d54-82f6-971c47152d63' Key: 'path' Value: './' Key: 'time' Value: '01_SEG' Key: 'uuid' Value: 'b16c325e-6d21-4d54-82f6-971c47152d63' Key: 'year' Value: '2019' --------------------------------------------------