Talend DI:从日志文件中提取多对行(使用正则表达式)

时间:2014-12-25 09:05:14

标签: regex csv extract rows talend

我正在使用TALEND DATA INTEGRATION

我有一个像这样的日志文件

I - Fab - 392 - 2014/12/20 22:09:15:200 - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Begin : 

I - Fab - 392 - 2014/12/20 22:12:15:438 - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Bus / Before :

500|00104|002PL|0036364043        |005PL

809|001BBG|00365   |005-0200|006+0000|007000|0080000|0240|0250|0260|0270|0280|0290|033STK|034063100       |0441

830|0093100       |0441

I - Fab - 392 - 2014/12/20 22:12:19:766 - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Bus / After : 

500|00104|002PL|0036364043        |005PL

510|001BBG|00365   |005-0200|006+0000|007000|0080000|0240|0250|0260|0270|0280|0290|033STK|034063100       |0441

我想提取第2行和第3行以及第6行和第7行(它们并不总是配对和损害)。无论如何,我使用了正则表达式:

"I - (Fab|Opt) - \\d+ - (\\d{4}/\\d{2}/\\d{2}) (\\d{2}:\\d{2}:\\d{2}:\\d{3}) - .+ Bus / (.+) : \\n500|.+|003(\\d{7}).+"

使用tFileInputRegex,但我不知道在行分隔符中使用的内容(默认为"\n"

我希望我的输出是一个CSV文件,其中有从第一行和第二行提取的数据。

我使用tMap生成CSV文件,但问题是我无法提取我想要的数据。

如果我提取我想要的数据,我将能够生成该文件。所以,我需要正则表达式部分的帮助。我想知道Talend DI是否有办法使用tFileInputRegex提取多行(在我的情况下为TWO)。

编辑:

我已将I -指定为行分隔符,因此我可以使用\n(没有任何混淆),但正则表达式似乎不起作用。

1 个答案:

答案 0 :(得分:1)

多行(行)的\n分隔符应该有效,因此它更像是整体正则表达式的问题。尝试使用这样的模式,因为它应该正确捕获组:

I.+(Fab|Opt).+(\\d{4}\\/\\d{2}\\/\\d{2}).+(\\d{2}:\\d{2}:\\d{2}:\\d{3}).+Bus\\s\\/\\s(\\w+)\\s:\\W+\\n500.+003(\\d{7}).+

示例:

<强> https://www.regex101.com/r/nL2xT7/