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
。
如果您只需要命名组 data 和 value 中的数据,您可以改用 lookarounds。
要匹配带有可选小数部分的数字,您可以改用 \d+(?:\.\d+)?
。
您应该从组中获取匹配项,而不是替换值。
(?<=5;)(?P<date>\d{8})|(?<=;3;)(?P<value>\d+(?:\.\d+)?)
我正在尝试解析来自 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
。
如果您只需要命名组 data 和 value 中的数据,您可以改用 lookarounds。
要匹配带有可选小数部分的数字,您可以改用 \d+(?:\.\d+)?
。
您应该从组中获取匹配项,而不是替换值。
(?<=5;)(?P<date>\d{8})|(?<=;3;)(?P<value>\d+(?:\.\d+)?)