【问题标题】:How to cast a int from string that contains not only numbers如何从不仅包含数字的字符串中转换 int
【发布时间】:2017-02-19 05:26:41
【问题描述】:

转换字符串很简单:

string1 = "12"
int1 = int(string1)

但是如果我想从中提取 int 怎么办

string1 = "12 pieces"

演员应该返回 12。有没有一种 Python 方法可以做到这一点并忽略任何不是数字的字符?

【问题讨论】:

  • 你需要从字符串中提取数字
  • 我自己回答了这个问题:[int(s) for s in string1.split() if s.isdigit()]
  • 您可以使用regex,或者您可以单独使用try: int()
  • 顺便说一句:我不会真的称之为 casting。这只是使用str 参数调用int 构造函数。

标签: python


【解决方案1】:

这个怎么样?

>>> string1 = "12 pieces"
>>> y = int(''.join([x for x in string1 if x in '1234567890']))
>>> print(y)
12

或者更好:

>>> string1 = "12 pieces"
>>> y = int(''.join([x for x in string1 if x.isdigit() ]))
>>> print(y)
12

【讨论】:

    【解决方案2】:

    有没有办法做到这一点并忽略任何不是数字的字符?

    忽略除数字之外的任何内容可能不是一个好主意。如果一个字符串包含"12 pieces 42",应该返回121242[12, 42],还是引发异常?

    您可以改为拆分字符串并将第一个元素转换为int

    In [1]: int('12 pieces'.split()[0])
    Out[1]: 12
    

    【讨论】:

      【解决方案3】:

      假设字符串的第一部分是一个数字,一种方法是使用正则表达式匹配:

      import re
      
      def strint(str):
          m=re.match("^[0-9]+", str)
          if m:
              return int(m.group(0))
          else:
              raise Exception("String does not start with a number")
      

      这种方法的优点是即使只有数字的字符串也可以轻松转换,因此您可以将此函数用作int()的替代品

      【讨论】:

        猜你喜欢
        • 2014-12-25
        • 2012-05-28
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        相关资源
        最近更新 更多