无法从字符串中删除所有非数字

时间:2013-07-29 16:40:20

标签: python string floating-point

我正在尝试使用此字符串创建一个浮点数:4\xb1.3189125061 我目前正在使用这个:

re.sub(r'[^\d.-]+', "", "4\xb1.3189125061")

但这仅输出:4.3189125061并始终删除\xb后面的数字。 有人知道解决方案吗?

2 个答案:

答案 0 :(得分:2)

Python看到\xb1转义码的一个字符。 1不是单独的字符:

>>> len('\xb1')
1

因此,它不是数字,点或短划线,正则表达式将其删除。

您可能需要弄清楚\xb1字节在原始数据中的含义。例如,在Latin-1中,B1代码点代表±字符,使您的值看起来像:

4 ± .3189125061

可能与您提供的内容有不同的含义。

答案 1 :(得分:0)

如使用ord所示,“\ xb1”是单个字符:

>>> ord('\xb1')
177
>>>

要解决此问题,您可以在字符串前添加“r”:

>>> import re
>>> re.sub(r'[^\d.-]+', "", r"4\xb1.3189125061")
'41.3189125061'
>>>

或使用repr

>>> import re
>>> re.sub(r'[^\d.-]+', "", repr("4\xb1.3189125061"))
'41.3189125061'
>>>