【发布时间】:2018-10-31 11:46:27
【问题描述】:
我正在尝试编写一个函数来拆分包含浮点数和一些单位的字符串。字符串在数字和单位之间可能有也可能没有空格。
在 C 中,函数strtod 有一个非常方便的参数,名为endptr,它允许您解析出字符串的初始部分,并获取指向剩余部分的指针。因为这正是我在这个场景中所需要的,所以我想知道 Python 中是否有类似的功能。
由于float 本身目前不提供此功能,我正在使用基于https://stackoverflow.com/a/4703508/2988730 的正则表达式解决方案:
float_pattern = re.compile(r'[+-]?(?:(?:\d+\.?)|(?:\d*.\d+))(?:[Ee][+-]?\d+)')
def split_units(string):
match = float_pattern.match(string)
if match is None: raise ValueError('not a float')
num = float(match.group())
units = string[match.end():].strip()
return num, units
这并不完全足够,原因有两个。首先是它重新发明了轮子。第二个是它不能正确识别区域设置而不增加额外的复杂性(这就是为什么我不想首先重新发明轮子)。
为了记录,字符串的尾部不能包含任何数字将包含的字符。唯一真正的问题是我不需要用空格将单位与数字隔开,所以做一个简单的string.split(maxsplit=1) 是行不通的。
有没有更好的方法从字符串的开头获取浮点数,以便我可以将其余部分作为其他内容处理?
【问题讨论】:
-
locale.atof?没用过也不知道ti有多全面。 -
float本身不支持区域设置。如果你想要区域设置感知,你想要像locale.atof这样的东西,它会拒绝float接受的一些东西。 -
是的。这是一个骗局。太糟糕了,那里没有任何像样的答案......
-
我关闭了这个问题,它是完全重复的。恐怕你被正则表达式困住了。欺骗链接建议从浮点解析的 C 源重新实现函数......是的,为什么不呢?
-
@Jean-FrançoisFabre。大概。如果我发现更好的东西,我会发布另一个问题的答案......