📅  最后修改于: 2023-12-03 15:36:16.411000             🧑  作者: Mango
在编程过程中,我们往往需要对数字进行操作,但有时这些数字可能被附加了符号(如正负号、小数点等),这时候我们需要把这些符号去除,以便更好的进行运算或处理。
正则表达式是处理字符串的利器,通过使用正则表达式,我们可以方便地将数字中的符号进行替换或去除。
import re
# 去除正负号
pattern = re.compile(r'[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?')
test_str = "123.456-789"
result = pattern.findall(test_str)
print(result)
输出:
[('123.456', '', ''), ('-789', '', '')]
这里使用了正则表达式 [+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?
,它能够匹配例如 -123.456e+789
这样的复杂数字,这个正则表达式的意思是:
[+-]?
匹配可选的正负号(\d+(\.\d*)?|\.\d+)
匹配数值部分,可以是整数或小数([eE][+-]?\d+)?
匹配科学计数法表示的部分,如 e+789、E-789这个正则表达式使用了分组,在 findall()
方法中,只有第一个分组中的内容会被返回,这正好是我们需要的数值部分。
当然,如果你只需要去除正负号,也可以使用更简单的正则表达式 [-+]?[\d\.]+
。其中:
[-+]?
匹配可选的正负号[\d\.]+
匹配数字和小数点这个正则表达式中没有考虑科学计数法的情况,如果需要可以在后面加上 ([eE][+-]?\d+)?
以匹配。
手动去除符号的方法相对来说比较简单,我们可以遍历数值字符串,把其中的符号去除。
def remove_symbol(num_str):
if not num_str:
return num_str
if num_str[0] in ("+", "-"):
num_str = num_str[1:] # 去除正负号
num_list = list(num_str)
while "." in num_list:
num_list.remove(".") # 去除小数点
return "".join(num_list)
这个函数首先判断了数字字符串是否为空,然后去除了正负号,最后遍历列表把其中的小数点去除。
值得一提的是,如果你所处理的数值比较大,每个数值字符串都需要手动遍历,也许会比较耗时,此时你可以使用 Numpy 库里的 numpy.core.defchararray.replace()
函数,它可以快速地替换字符。
无论是使用正则表达式还是手动去除符号,我们都可以方便地去除数字中的符号,以便更好地进行后续操作。