Python如何从目标字符串中提取所有非零数值?
解决方案
方法1:字符串分割过滤
这种方法简单直接,利用\0作为分隔符拆分字符串,再过滤掉空值和零值:
以Python为例:
s = '\0\0.412583\0.4415169\0.4140446\0.3750735\0\0.4128125\0\0' # 按空字符\0分割字符串 parts = s.split('\0') # 过滤掉空字符串和值为'0'的项,再转换为浮点数 non_zero_values = [float(item) for item in parts if item and item != '0'] print(non_zero_values)
输出结果:
[0.412583, 0.4415169, 0.4140446, 0.3750735, 0.4128125]
方法2:正则表达式匹配
如果一定要用正则,可直接匹配所有带小数点的数值(示例中非零值均为小数格式):
import re s = '\0\0.412583\0.4415169\0.4140446\0.3750735\0\0.4128125\0\0' # 匹配所有形如「数字.数字」的字符串 pattern = r'\d+\.\d+' matches = re.findall(pattern, s) # 转换为浮点数 non_zero_values = [float(match) for match in matches] print(non_zero_values)
输出结果与方法1一致。
正则失败的常见原因
如果之前正则匹配失败,大概率是没针对场景调整模式:比如误包含零值匹配,或没考虑\0分隔符的影响。如果场景中存在整数形式的非零值(如\0\5\0),可以调整正则并过滤零值:
matches = re.findall(r'\d+\.?\d*', s) non_zero_values = [float(m) for m in matches if float(m) != 0]
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

