在一个混合输入python的字符串中返回float和int

时间:2016-11-27 22:54:10

标签: python regex int

我正在尝试创建一个函数,它将从输入的字符串返回intigers和float。但会删除包含任何非数字字符的单词。目前我已经得到它只返回数字,但它不会将浮动作为浮点数返回

<select ng-model="product1.stars">
  <option  value="<i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star"></i>
          <i class="fa fa-star-half-o"></i>
          <i class="fa fa-star-o"></i>" >
  </option>
</select> 

3 个答案:

答案 0 :(得分:0)

这应该有效:

re.findall(r"\b(\d+\.\d+|\d+)\b", float_sort)

它使用\b边界类,并且您使用\\进行双重转义

答案 1 :(得分:0)

这样的事情怎么样?

正则表达式匹配一个空格分隔的单词,只包含数字字符,可能只有一个点。然后将所有内容转换为float,然后将可以表示为int的内容转换为int。只有在出于某种原因确实需要这些数字int时才需要最后一步。

import re

float_sort = '0.2 2.1 3.1 ab 3 c abc23'
split = re.findall(r"\b(\d+\.\d+|\d+)\b", float_sort)
print(float_sort)

split = [float(x) for x in split]
split = [int(x) if x == int(x) else x for x in split]

print(split)
print([type(x) for x in split])

答案 2 :(得分:0)

您可以遍历每个值并尝试将其转换为float或int。如果我们无法对其进行转换,那么我们就不会将其包含在最终输出中。字符串有一些有用的功能,可以让我们确定字符串是否可能代表intfloat

 # split each element on the space
 l = float_sort.split()

 # for each element, try and convert it to a float
 # and add it into the `converted` list
 converted = []
 for i in l:
    try:
       # check if the string is all numeric.  In that case, it can be an int
       # otherwise, it could be a float     
       if i.isnumeric():
           converted.append(int(i))
       else:
         converted.append(float(i))
    except ValueError:
       pass

  # [0.2, 2.1, 3.1, 3]