【问题标题】:Convert measurement from String to Int or Float将测量值从 String 转换为 Int 或 Float
【发布时间】:2016-08-08 09:32:14
【问题描述】:

我有字符串

var = '7 msecs'
#var = int(var)
#var = float(var)

我想将其转换为整数 (7) 或浮点数 (7.0)。 这种转换在 javascript 中有效,因为它似乎在以下非数字值之前采用第一个值。

如何在 Python 中做到这一点?

我想要一个很好的方法来做到这一点,而不必这样做

var = int(var.split(' ')[0])

它也应该适用于:

'10mm' or '10.55€' 

考虑重复 (Python: Extract numbers from a string)

这个问题是不同的,因为我试图在 javascript 中复制 parseInt/parseFloat 的能力,它只返回字符串开头的数字。另一个问题是查找字符串中的所有数字。

#What I want:
'123mm' -> 123
'123mm1' -> 123

【问题讨论】:

  • 测量值始终以“毫秒”为单位?
  • int(var.split()[0])
  • @Trimax 好吧,不,在我的例子中它只是毫秒,因为它是我目前正在使用的
  • 我认为使用split 非常pythonic,您不需要空格,只需将空括号拆分为所有空格和换行符

标签: python string int measurement


【解决方案1】:

如果有空格,请使用split:

>>> s = "123 msecs2"
>>> int(s.split()[0])
123

如果您只想从字符串开头获取数字而不需要空格(或使用正则表达式),请尝试以下操作:

>>> s = "123msecs2"
>>> int("".join(list(next(iter(())) if not x.isdigit() else x for x in s)))
123

注意,它的灵感来自于 here 关于打破列表理解的讨论。

【讨论】:

  • 如果添加原件(val.split()[0]),包括这个我会接受答案
【解决方案2】:

这里已经回答了:Python: Extract numbers from a string

您可以使用正则表达式从字符串中提取所有数字:

>>> import re
>>> s = "7 msecs"
>>> re.findall(r"\d+", s)
["7"]

如果您只想将字符串中的第一个数字作为 int,您可以使用:

>>> import re
>>> s = "7 msecs"
>>> int(re.findall(r"\d+", s)[0])
7

【讨论】:

    【解决方案3】:

    如果  var = '7 msecs'

    过滤器

    int(filter(str.isdigit, var))
    

    通过正则表达式

    import re
    p = re.compile(ur'\d')
    re.search(p, var)
    

    或通过加入

    s = ''.join(x for x in var if x.isdigit())
    print int(s)
    7
    

    【讨论】:

      【解决方案4】:

      如果你想避免导入正则表达式,你可以尝试使用isdigit()。但是对于它的价值,我更喜欢int(var.split()[0])

      var = '7 msecs'
      numeric_end = 0
      for i in xrange(len(var)):
          if not var[i].isdigit():
              numeric_end = i
              break
      
      print int(var[:numeric_end])
      

      出于轻微的内存/性能原因,我选择跟踪第一个非数字字符的索引而不是构建字符串。这也只提取字符串中的第一个数字。

      这当然只适用于整数。对于浮点数,您还必须接受 . 字符(并可能跟踪您是否已经必须确定它是否是有效的浮点字符串)。

      【讨论】:

        猜你喜欢
        • 2019-12-11
        • 1970-01-01
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-16
        相关资源
        最近更新 更多