0

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

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

但这仅输出:4.3189125061并始终删除 . 后面的数字\xb。有谁知道解决这个问题?

4

2 回答 2

2

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

>>> len('\xb1')
1

因此,它不是数字、点或破折号,正则表达式将其删除。

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

4 ± .3189125061

这可能与您给出的含义不同。

于 2013-07-29T16:42:30.040 回答
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'
>>>
于 2013-07-29T16:57:47.603 回答