如何在字符串中查找浮点数 - Python?

时间:2017-07-06 02:51:56

标签: python python-3.x floating-point

我想找到使用Python 3出现在字符串中的第一个浮点数。

我查看了其他类似的问题,但我无法理解它们,当我尝试实施它们时,它们对我的情况不起作用。

示例字符串是

I would like 1.5 cookies please

4 个答案:

答案 0 :(得分:5)

我很确定这是一个更优雅的解决方案,但这个解决方案适用于您的特定情况:

s = 'I would like 1.5 cookies please'

for i in s.split():
    try:
        #trying to convert i to float
        result = float(i)
        #break the loop if i is the first string that's successfully converted
        break
    except:
        continue

print(result) #1.5

希望它有所帮助!

答案 1 :(得分:4)

你可以使用regex找到这个,注意这个模式只会返回子串,如果它已经在float类型,即十进制fomatting,所以像这样:

>>> import re
>>> matches = re.findall("[+-]?\d+\.\d+", "I would like 1.5 cookies please")

正如你所说,你只想要第一个:

>>> matches[0]
'1.5'

编辑:在模式中添加[+-]?以识别负浮动,建议使用开心果!

答案 2 :(得分:1)

如果您希望空格分隔十进制浮点数,请使用str方法并删除-+.

s = 'I would like 1.5 cookies please'
results = [t for t in s.split() 
           if t.lstrip('+-').replace('.', '', 1).isdigit()]
print(results[0])  #1.5

lstrip用于仅删除文本左侧的符号,而replace的第三个参数用于仅替换文本中的一个点。确切的实现取决于您希望如何格式化浮点数(支持符号之间的空格等)。

答案 3 :(得分:0)

我会使用正则表达式。下面还会检查负值。

import re

stringToSearch = 'I would like 1.5 cookies please'
searchPattern = re.compile(".*(-?[0-9]\.[0-9]).*")
searchMatch = searchPattern.search(stringToSearch)

if searchMatch:
    floatValue = searchMatch.group(1)
else:
    raise Exception('float not found')

您可以使用PyRegex检查正则表达式。