【问题标题】:How to extract integer or float from string [duplicate]如何从字符串中提取整数或浮点数[重复]
【发布时间】:2019-03-16 03:25:38
【问题描述】:

我在 string 中得到了像 20.5 mg,20 mg 这样的剂量强度值。我只想提取整数或浮点值。

以下是我目前尝试过的

def parseint(self,string):
   return int(''.join([x for x in string if x.isdigit()]))   

但这并不是在所有情况下都有效。

ex1)

parseint('2 mg')
o/p- 2

ex2)

parseint('10.2 mg')
o/p - 102 

预期输出:

i/p "20.5 MG" o/p- 20.5
i/p "20.0 MG" o/p - 20.0
i/p "20.0 MG" o/p - 20.0

【问题讨论】:

  • 提示:'.' 不是数字
  • 改用regex
  • 20.5 和 10.2 也不是整数,你的标题也说浮点数,但你的问题只说明整数,这是正确的吗?
  • ' . ' 不是数字。是的,这就是为什么它没有整数。我怎么也有这个。
  • float("20.5 mg".split()[0])

标签: python python-3.x


【解决方案1】:

使用正则表达式。

例如:

import re


def parseint(string):
    m = re.search(r"(\d*\.?\d*)", string)
    return m.group() if m else None

s1 = "20.5 mg,"
s2 = "20 mg"

print(parseint(s1))
print(parseint(s2))

输出:

20.5
20

【讨论】:

    【解决方案2】:
    def parseint(string):
        return float(''.join([x for x in string if x.isdigit() or x == '.']))
    

    这样的事情应该可以工作。

    【讨论】:

    • 实际上这是可行的,但在一种情况下,像 "25 MG" 这样的值。它给了我 25.0 的输出,但我认为我只需要 25。
    【解决方案3】:

    使用列表推导,.split(),float, andint`

    res = [float(i.split()[0]) if '.' in i else int(i.split()[0]) for i in lst]
    

    扩展解释

    lst = ['2 mg', '10.2 mg', '20.5 MG']
    for i in lst:
        if '.' in i:
            print(float(i.split()[0]))
        else:
            print(int(i.split()[0]))
    # 2
    # 10.2
    # 20.5
    

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2022-10-16
      • 2020-12-17
      • 2017-06-09
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多