我下面有XML文档。我想剥离State
和<TXT>
之间的所有标签,以在NiFi中制作原始文本标签,以便原始文本读起来像一个句子。我在NiFi的ReplaceText处理器中尝试了以下正则表达式模式,但是该过程失败了,即使它捕获了regex101.com上的完整txt部分。我做错了什么?
客户宁愿使用内置的NiFi处理器来执行此操作,而不是执行脚本。
正则表达式
</TXT>
XML
<TXT.*>((.|\n)*?)<\/TXT>$
ReplaceText配置如下
<DOC>
<ID>12345</ID>
<TXT>
<A><DESC type="PERSON">George Washington</DESC> lived in a house called <DESC type="PLACE">Mount Vernon</DESC></A>
</TXT>
</DOC>
理想的输出
Search Value: <TXT.*>((.|\n)*?)<\/TXT>$
Replacement Value: <RAW>$1</RAW>
Character Set: UTF-8
Maximum Buffer Size: 1 MB
Replacement Strategy: Regex Replace
Evaluation Mode: Entire text
答案 0 :(得分:0)
首先,免责声明:
据我所知,您无法在NiFi中进行递归正则表达式。因此,您需要链接处理器:
<TXT>([\S\s]*?)<\/TXT>
替换为<RAW>$1</RAW>
<RAW>[\S|\s]*?<[\S|\s]*?</RAW>
上的内容(如果RAW包含内部标记)
(<RAW>[\S\s]*?)(<[\S\s]*?>)([\S\s]*?</RAW>)
但是,这确实显得有些矫kill过正,并且由于注释了您的文本,因此您的客户端可能已经在某处使用了Python,因此不必担心脚本。