Python - 将字符串数值转换为浮点数

3

我有以下的字符串数值,需要保留数字和小数点。我无法找到正确的正则表达式。

s = [
      "12.45-280", # need to convert to 12.45280
      "A10.4B2", # need to convert to 10.42
]

1
你的第一预期输出值是浮点数-267.55还是字符串"12.45-280"? - jeff carey
1
你尝试过哪些正则表达式,它们的结果如何? - CAB
尝试过 [0-9\.].? 吗? - alvas
这将匹配一个数字或句点后面跟着零个或一个(任何)字符。我认为这将在s[0]的开头匹配两个字符,而不匹配s[1]中的任何字符,对吗?编辑您的问题并准确展示您想要它做什么。 - CAB
3个回答

1
您还可以删除所有非数字和非点字符,然后将结果转换为浮点数:
In [1]: import re
In [2]: s = [
   ...:       "12.45-280", # need to convert to 12.45280
   ...:       "A10.4B2", # need to convert to 10.42
   ...: ]

In [3]: for item in s:
   ...:     print(float(re.sub(r"[^0-9.]", "", item)))
   ...:     
12.4528
10.42

这里的 [^0-9.] 会匹配除数字和英文句点以外的任何字符。


一个数字中只允许有一个小数点。同时,负数应该接受一个前导减号。 - VPfB
@VPfB提出了一些需要考虑的好观点,谢谢。 - alecxe

0

将字符串中的每个字母字符转换为空字符""

import re
num_string = []* len(s)
for i, string in enumerate(s):
    num_string[i] = re.sub('[a-zA-Z]+', '', string)

0
你可以结合使用 locale 和正则表达式来实现:
import re, locale
from locale import atof

# or whatever else
locale.setlocale(locale.LC_NUMERIC, 'en_GB.UTF-8')

s = [
      "12.45-280", # need to convert to 12.45280
      "A10.4B2", # need to convert to 10.42
]

rx = re.compile(r'[A-Z-]+')

def convert(item):
    """
    Try to convert the item to a float
    """
    try:
        return atof(rx.sub('', item))
    except:
        return None

converted = [match
            for item in s
            for match in [convert(item)]
            if match]

print(converted)
# [12.4528, 10.42]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接