从Python中充满垃圾的字符串中的第一个浮点?

2024-10-02 12:38:47 发布

您现在位置:Python中文网/ 问答频道 /正文

从一个随机垃圾串中获取第一个有效的浮点数(我认为int是一个有效的浮点)的最干净的方法是什么?在

"jkyf- skj7eio9.00" -> 7.0
"r-9.98989 8JHGJHG" -> -9.98989
"kjg-§ejjkv" -> None (or some other indication that no float was found)

等等?是否可以不加载re模块?在


Tags: or方法nononethatsome垃圾int
3条回答

类似这样的方法应该是可行的(未经测试,因为如果您想避免re,那么首先是非音韵方法)。一个潜在的-符号无法识别,但您也应该能够包括它。在

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))

您可以尝试对每个子字符串使用float(substring),直到找到一个:

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]: 

编辑:我刚刚注意到您要避免使用re。在

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])

相关问题 更多 >

    热门问题