s = re.sub(r'[^\d.]', '', s) 导致负数变正数
时间: 2024-10-24 09:07:31 浏览: 22
python re.sub()替换正则的匹配内容方法
`re.sub(r'[^\d.]', '', s)` 这行代码的意思是在字符串 `s` 中查找所有不是数字 (`\d`) 或者小数点 (`.`) 的字符,并将其替换成空字符串,也就是移除它们。这并不会导致负数变成正数,它只会清理掉数字之外的字符,如逗号、空格等。
如果你担心的是负数的表示形式,比如 `-6,941.73` 转换后丢失了负号,那是因为在 Python 中,浮点数前面的减号并不构成数值的一部分,而是用于表示其符号。所以在转换过程中,如果原始字符串中没有明确的负号(-),`float()` 函数仍然会创建一个正数。例如:
```python
s = '-6,941.73'
num = float(re.sub(r'[^\d.]', '', s)) # 输出 6941.73,而不是 -6941.73
```
如果你想保留负号,你应该在转换前检查字符串是否以 `-` 开始,然后在转换后再添加负号:
```python
s = '-6,941.73'
is_negative = s.startswith('-')
num = float(re.sub(r'[^\d.]', '', s[1:] if is_negative else s))
num *= -1 if is_negative else 1 # 添加负号
```
现在,`num` 应该是 `-6941.73`。
阅读全文