我正在编写一个Python脚本,用于从频繁掉线的不稳定无线连接接收数据。我需要将接收到的字符串转换为各种int和float,但是通常数据会乱码,导致出现诸如“ int无效的文字”(或float)之类的错误。
数据以逗号分隔的int和float值的形式出现,但通常会缺少一些数字和/或逗号和/或行尾。
我正在寻找一个类似于Commodore 64的val(x $)函数的函数(对不起,仅供参考-我很旧):
print val("3")
3
print val("234xyz")
234
print val("55.123456*******")
55.123456
我想我可以通过try-catch运行每个数字,但这似乎有点过头了。没有这个功能吗?
答案 0 :(得分:5)
您可以使用re.match
从字符串的开头提取数字或小数点,然后转换为浮点数
>>> import re
>>> s = "55.123456*******"
>>> float(re.match(r'[\d.]*', s).group())
55.123456
答案 1 :(得分:4)
使用正则表达式。
import re
def getInt(val):
m = re.match(r"\d+\.?\d*", val)
return m.group() if m else None
print(getInt("3"))
print(getInt("234xyz"))
print(getInt("55.123456*******"))
输出:
3
234
55.123456