Bloomberg 批量数据正则表达式解析

Bloomberg Bulk Data Regex Parsing

我正在尝试解析来自 Bloomberg 数据许可证的结果,当它们 return 为 bulk data 格式时。

这个字符串通常是一串键值对,用分号分隔,并用数字表示它们的数据类型。

前三个数字是事实,它是一个二维数组,有 4 个结果。值之前的数字是数据类型,例如5 是日期,3 是数字,不过现在这并不重要。

这是一个示例数据响应: ;2;4;2;5;20181201;3;102;5;20191201;3;101.000000;5;20201201;3;100.000000;5;20211201;3;100.000000;

预计return会从这个字符串中获取日期和值,结果会是:

20181201 - 102

20191201 - 101.000000

20201201 - 100.000000

20211201 - 100.000000

我已经使用替换尝试了以下正则表达式:

5;(?P<date>\d{8})|\;3;(?P<value>\w+.\w+) 并使用替换值 , ,其中 return 如下:

;2;4;2;20181201,,102;5;20191201,101.000000;20201201,,100.000000;20211201,,100.000000;

我仍然得到 ;2;4;2 的 return 值 - 如何忽略正则表达式中的前三个分组值?

P.S。这只是示例数据,实际上并不涉及任何内容

在您的模式中,您使用 \w+.\w+ 匹配 1 个以上的单词字符,1 次使用点的任何字符,然后再次匹配 1 个以上的单词字符。它预计至少匹配 3 个字符。

这就是为什么在示例数据中您匹配 102;5 而不是 102,因为点将匹配 ; 而最后一个 \w+ 将匹配 5


如果您只需要命名组 datavalue 中的数据,您可以改用 lookarounds。

要匹配带有可选小数部分的数字,您可以改用 \d+(?:\.\d+)?

您应该从组中获取匹配项,而不是替换值。

(?<=5;)(?P<date>\d{8})|(?<=;3;)(?P<value>\d+(?:\.\d+)?)

Regex demo