nums = [0,1,2,3,4,5,6,7,8,9,0]
firstfloat=[]
scanning = False
for letter in string:
if letter in nums:
firstfloat.append(letter)
scanning = True
if letter == '.' and scanning:
firstfloat.append('.')
continue
if scanning and letter not in nums:
break
print(''.join(firstfloat))
In [24]: def get_first_float(s):
....: for start in range(len(s)):
....: for end in range(len(s), start, -1):
....: try:
....: return float(s[start:end])
....: except ValueError:
....: pass
....:
In [25]: get_first_float("jkyf- skj7eio9.00")
Out[25]: 7.0
In [26]: get_first_float("r-9.98989 8JHGJHG")
Out[26]: -9.98989
In [27]: get_first_float("kjg-§ejjkv")
In [28]: get_first_float("Even finds 1e6, One Million!")
Out[28]: 1000000.0
In [29]:
import re
strings = ['jkyf- skj7eio9.00',
'jkyf- skj6.90.90eio9.00',
'r-9.98989 8JHGJHG',
'kjg-jejjkv']
regex = r'[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?'
for s in strings:
found = re.findall(regex,s)
# print found
if len(found) > 0:
print float(found[0][0])
类似这样的方法应该是可行的(未经测试,因为如果您想避免
re
,那么首先是非音韵方法)。一个潜在的-
符号无法识别,但您也应该能够包括它。在您可以尝试对每个子字符串使用
float(substring)
,直到找到一个:编辑:我刚刚注意到您要避免使用
re
。在相关问题 更多 >
编程相关推荐