是否有一个与C';的endptr参数等效的Python;斯特罗德是谁?
我正在尝试编写一个函数,用于拆分包含浮点数和一些单位的字符串。字符串的数字和单位之间可能有空格,也可能没有空格 在C语言中,函数有一个非常方便的参数,名为是否有一个与C';的endptr参数等效的Python;斯特罗德是谁?,python,strtod,Python,Strtod,我正在尝试编写一个函数,用于拆分包含浮点数和一些单位的字符串。字符串的数字和单位之间可能有空格,也可能没有空格 在C语言中,函数有一个非常方便的参数,名为endptr,它允许您解析字符串的初始部分,并获取指向剩余部分的指针。因为这正是这个场景所需要的,所以我想知道Python中是否有类似的功能 由于float本身目前不提供此功能,因此我使用的正则表达式解决方案基于: 这并不完全足够,原因有二。首先,它重新发明了轮子。第二个问题是,如果不增加额外的复杂性,它就不能正确地识别区域设置(这就是为什么我
endptr
,它允许您解析字符串的初始部分,并获取指向剩余部分的指针。因为这正是这个场景所需要的,所以我想知道Python中是否有类似的功能
由于float
本身目前不提供此功能,因此我使用的正则表达式解决方案基于:
这并不完全足够,原因有二。首先,它重新发明了轮子。第二个问题是,如果不增加额外的复杂性,它就不能正确地识别区域设置(这就是为什么我不想重新发明轮子的原因)
对于记录,字符串的尾部不能包含数字将包含的任何字符。唯一真正的问题是,我不要求单位与数字之间用空格分隔,因此执行简单的string.split(maxplit=1)
是行不通的
有没有更好的方法从字符串开头获取浮点数,这样我就可以将其余部分作为其他内容处理?我知道这是一个愚蠢的解决方案,但这样如何:
def float_and_more(something):
orig = something
rest = ''
while something:
try:
return float(something), rest
except ValueError:
rest = something[-1] + rest
something = something[:-1]
raise ValueError('Invalid value: {}'.format(orig))
你可以这样使用它:
>>> float_and_more('2.5 meters')
(2.5, 'meters')
如果您想真正使用它,您可能会使用
io.StringIO
,而不是不断地重新创建字符串。locale.atof
?我从未使用过它,也不知道ti有多全面。float
本身不知道区域设置。如果您想要区域设置感知,您需要类似的东西,它将拒绝一些float
接受的东西。是的。这是个骗局。太糟糕了,那里没有任何像样的答案……我结束了这个问题,这是一个完全重复的问题。恐怕你被正则表达式卡住了。dupe链接建议从浮点解析的C源代码重新实现该函数。。。“是啊,为什么不呢?”让·弗朗索瓦·法布说。可能如果我找到更好的答案,我会发布另一个问题的答案……嘿,同样的想法:)@Jean-Françoisfare。同样的评论。二进制搜索对于长字符串会更好,老实说,这听起来根本不是一个好方法。
>>> float_and_more('2.5 meters')
(2.5, 'meters')