如何在python中使用unicode组件计算字符串的数值?

根据我之前的问题
How do I convert unicode characters to floats in Python?,我想找到一个更优雅的解决方案来计算包含unicode数值的字符串的值.

例如,取字符串“1⅕”和“1⅕”.我希望这些解决到1.2

我知道我可以逐个字符地迭代,检查每个字符的unicodedata.category(x)==“否”,并通过unicodedata.numeric(x)转换unicode字符.然后我必须拆分字符串并对值求和.然而,这似乎相当黑客和不稳定.在Python中有更优雅的解决方案吗?

最佳答案 我想这就是你想要的……

import unicodedata
def eval_unicode(s):
    #sum all the unicode fractions
    u = sum(map(unicodedata.numeric, filter(lambda x: unicodedata.category(x)=="No",s)))
    #eval the regular digits (with optional dot) as a float, or default to 0
    n = float("".join(filter(lambda x:x.isdigit() or x==".", s)) or 0)
    return n+u

或“全面”的解决方案,对于喜欢这种风格的人:

import unicodedata
def eval_unicode(s):
    #sum all the unicode fractions
    u = sum(unicodedata.numeric(i) for i in s if unicodedata.category(i)=="No")
    #eval the regular digits (with optional dot) as a float, or default to 0
    n = float("".join(i for i in s if i.isdigit() or i==".") or 0)
    return n+u

但要注意,有许多unicode值似乎没有在python中分配数值(例如⅜⅝不起作用……或者可能只是我的键盘xD的问题).

关于实施的另一个注意事项:它“过于强大”,即使是“123½3½”这样的错误数字也会起作用,并将其评估为1234.0 ……但如果有多个点,它将无效.

点赞