我想找到使用Python 3出现在字符串中的第一个浮点数。
我查看了其他类似的问题,但我无法理解它们,当我尝试实施它们时,它们对我的情况不起作用。
示例字符串是
I would like 1.5 cookies please
答案 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检查正则表达式。