【发布时间】:2015-09-23 07:09:02
【问题描述】:
我正在尝试从以下字符串中提取第一个(或唯一一个)浮点或整数:
str1 = np.asarray('92834.1alksjdhaklsjh')
str2 = np.asarray'-987___-')
str3 = np.asarray'-234234.alskjhdasd')
哪里,如果解析正确,我们应该得到
var1 = 92834.1 #float
var2 = -987 #int
var3 = -234234.0 #float
使用 numpy 数组的“屏蔽”属性,我想出了类似 str_ 变量的任何东西,例如:
>> ma1 = np.asarray([not str.isalpha(c) for c in str1.tostring()],dtype=bool)
array([ True, True, True, True, True, True, True, False, False,
False, False, False, False, False, False, False, False, False,
False, False], dtype=bool)
>> str1[ma1]
IndexError: too many indeces for array
现在我已经阅读了有关使用布尔数组进行索引的所有内容;但我无法让它工作。
这很简单,我认为花时间找出一个正则表达式并不值得,但又足够复杂,给我带来了麻烦。
【问题讨论】:
-
没有 numpy 的类似算法 -
''.join([c for c in s if not c.isalpha()])。但请注意,如果字符串中有多个位置存在数字,则绝不会取出第一个浮点数/整数。 -
我认为您可以在这里使用
^.*?([+-]?\d*\.?\d+)正则表达式。它对你有用吗? -
@stribizhev - 正则表达式令人印象深刻(我的恐惧),但对于您链接的示例,它返回一个 int,当它需要返回一个解析的浮点数时。对于我的应用程序,正确输入类型很重要。我修改了your script 以表明我的意思。
-
我认为
-234234是一个整数,而不是一个浮点数。您要求提取整数或浮点数。如果您只需要浮动,请使用 Kasra 的版本。
标签: python arrays regex numpy indexing