使用Python regex解析Java Arrays.deepToString输出的浮点字符串

Nic*_*ave 7 python java regex arrays string

我正在使用某人的Java代码,其中一个关键数据结构是一个m x n x p数组,float[][][].我需要把它变成Python; 目前我的方法是使用Arrays.deepToString将数组保存到文本文件,然后从Python解析该文本文件.

我坚持如何编写将解析txt的正则表达式.我可以做的是找到所有与科学记数法及其相关指数的浮动.我使用以下模式来执行此操作:

float_pat = r'\d\.\d*(?:E-\d+)?'
Run Code Online (Sandbox Code Playgroud)

这可以很好地捕获科学记数法中的浮点数,因为它们是由deepToString输出的.请注意,这些值都是正数,因为它们是概率.也就是说,我对自己如何捕捉数字没有任何问题.

不能做但我想做的是正则表达式搜索左括号和右括号中包含的任意数量的浮点数.我试过这个:

list_of_floats_pat = r'\[(?:\d\.\d*(?:E-\d+)?), )+\]'
Run Code Online (Sandbox Code Playgroud)

我试图找到一个或多个浮点格式的情况,后跟逗号和方括号括起来的空格.但那会回来[].不确定我不理解的是什么.

这是一个示例2x1x1数组:

[[[0.6453525160688715, 0.15620941152962334, 0.1874313118193626, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 0.01050721017750691, 9.991008092716556E-5], [0.5904776610141782, 0.18175460267577365, 9.991008092716556E-5, 0.22716827582448523, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5]]]
Run Code Online (Sandbox Code Playgroud)

我想要的是正则表达式返回两个匹配:

0.6453525160688715, 0.15620941152962334, 0.1874313118193626, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 0.01050721017750691, 9.991008092716556E-5
Run Code Online (Sandbox Code Playgroud)

0.5904776610141782, 0.18175460267577365, 9.991008092716556E-5, 0.22716827582448523, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5
Run Code Online (Sandbox Code Playgroud)

然后,我可以解析为带和拆分的字符串.

我找到了一个解决方法,我只找到所有括号索引.但我想知道我对正则表达式的理解.

mgi*_*son 4

您拥有的数据都是有效的 python 和有效的 json:

>>> s = '[[[0.6453525160688715, 0.15620941152962334, 0.1874313118193626, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 0.01050721017750691, 9.991008092716556E-5], [0.5904776610141782, 0.18175460267577365, 9.991008092716556E-5, 0.22716827582448523, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5, 9.991008092716556E-5]]]'
>>> ast.literal_eval(s)
[[[0.6453525160688715, 0.15620941152962334, 0.1874313118193626, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 0.01050721017750691, 9.991008092716556e-05], [0.5904776610141782, 0.18175460267577365, 9.991008092716556e-05, 0.22716827582448523, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05]]]
>>> json.loads(s)
[[[0.6453525160688715, 0.15620941152962334, 0.1874313118193626, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 0.01050721017750691, 9.991008092716556e-05], [0.5904776610141782, 0.18175460267577365, 9.991008092716556e-05, 0.22716827582448523, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05, 9.991008092716556e-05]]]
Run Code Online (Sandbox Code Playgroud)

使用这些库进行解析比尝试使用正则表达式进行解析会更好。