gpt4 book ai didi

java - 使用 Python 正则表达式解析 Java Arrays.deepToString 输出的浮点字符串

转载 作者:太空狗 更新时间:2023-10-29 21:41:58 27 4
gpt4 key购买 nike

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

我被困在如何编写将解析 txt 的正则表达式上。我做的是找到所有 float 及其相关的科学计数指数。我使用以下模式来这样做:

float_pat = r'\d\.\d*(?:E-\d+)?'

当它们由 deepToString 输出时,这可以很好地捕获科学记数法中的 float 。请注意,这些值都是正的,因为它们是概率。即,我对自己获取数字的方式没有任何问题。

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

list_of_floats_pat = r'\[(?:\d\.\d*(?:E-\d+)?), )+\]'

我试图找到一个或多个 float 格式的情况,后跟一个逗号和一个由方括号括起来的空格。但这会返回 []。不确定我不明白什么。

这是一个 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]]]

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

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

然后我可以使用 strip 和 split 将其解析为字符串。

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

最佳答案

您拥有的数据是有效的 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]]]

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

关于java - 使用 Python 正则表达式解析 Java Arrays.deepToString 输出的浮点字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41323746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com