- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在处理某人的 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/
这个问题已经有答案了: 奥 git _a (3 个回答) 奥 git _a (4 个回答) 已关闭 7 年前。 我想使用此方法将二维数组转换为字符串到属性文件中。然后,通过将属性字符串转换回二维数组来
有人可以帮我做点什么吗?我正在尝试将最初使用 deepToString() 方法创建的字符串转换回数组。我已经尝试了几乎所有在 Stack Overflow 上能找到的东西……但没有成功。 这就是我现
Arrays.deepToString()主要用于数组中还有数组的情况,而Arrays.toString()则相反,对于Arrays.toString()而言,当数组中有数组时,不会打印出数组中的内
类java.util.Objects包含deepEquals(Object a, Object b)方法,可用于比较任何类型的对象(包括数组和null)引用),但不包含类似的 deepToString
我发现了类似的问题: Java - Best way to print 2D array? 但他们没有回答以下问题 - 它是否更有效率? 我正在用 C# 编写一个基本的小型控制台游戏,需要反复清除和写
我正在调试一些 javascript,并不断遇到 javascript [object](例如,当我显示带有值的警报时,它显示为 [object] 或 NaN)。我正在尝试读取该对象的内容。我知道在
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我正在处理某人的 Java 代码,其中关键数据结构是 m x n x p 数组,float[][][]。我需要把它放到 Python 中;目前我的方法是使用 Arrays.deepToString 将
我在使用 Arrays.deepToString( Object[] arr ) 方法打印 Java 中基元数组的元素时遇到问题。如果我将 arr 定义为 int[][] T = { {0,1},{2
我是一名优秀的程序员,十分优秀!