Python strip()函数 - 删除字符串之前/之后的字符

时间:2013-10-23 13:25:20

标签: python arrays string strip

我正在尝试删除以下数组中的所有内容,但两个数字和中间的,除外。

这是数组: [array([[ 1948.97753906, 1058.23937988]], dtype=float32)]

此数组的大小总是在变化(可以有1对数字或6对等)并填充不同的数字,但格式始终保持不变。

我目前有以下代码,但是,我认为只有在数组中有一对数字时才能使用?

final = str(self.lostfeatures).strip('[array([[ ').strip(']], dtype=float32)')

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:1)

如果那只是一个前缀/后缀,请使用replace

final = str(self.lostfeatures).replace('[array([[','').replace(']], dtype=float32)', '')

您可以使用正则表达式执行类似操作:

numbers = re.findall('(?P<number>\d+\.\d+)', str(self.lostfeatures))

这也会给你一个数字本身的数组(所以从那里转换为浮动是很简单的。)

但是......如果你正在做str(lostfeatures),原来必须已经在一个数组中。为什么你甚至要投射到弦?您应该能够像这样直接提取数值数组:

lostfeatures[0][0]

(您似乎有两个间接级别...... lostfeatures[0] = array([[ 1948.97753906, 1058.23937988]],然后是lostfeatures[0][0] == [1948.97753906, 1058.23937988])。目前尚不清楚您的数据结构究竟是什么样的,但这是迄今为止最快的。

答案 1 :(得分:1)

我会说你有一个2D numpy数组(self.features)(坐标对?)并且你想格式化每一行(位置?),例如:

for pair in self.features: 
    print '{0}, {1}'.format(*pair)

答案 2 :(得分:0)

如你的例子所示。我认为这可以回答你的问题。

>>> x = "[array([[ 1948.97753906, 1058.23937988]], dtype=float32)]"
>>> print x.split("[[")[1].split("]]")[0].replace(",","")

答案 3 :(得分:0)

如果格式始终相同,那么它始终以"[array([["开头,并始终以"]], dtype=float32)"结尾,您应该使用切片。

final = str(self.lostfeatures)[len('[array([[ '):-len(']], dtype=float32)')]

答案 4 :(得分:0)

我可能会推荐这个用例的正则表达式

import re

ptrn = re.compile(r'((?:\d+(?:\.\d+)?, ?)+(?:\d+(?:\.\d+)?))'

x = "[array([[ 1948.97753906, 1058.23937988]], dtype=float32)]"
print ptrn.search(x).group(1)