我有一些字符串,比如'ms2p5','ms3','ms10',我需要提取这些数字,转换成数字,如下所示。
'ms2p5' => 2.5 'ms3' => 3 'ms10' => 10
我试了下面的正则表达式,它能得到匹配。一个问题是值在提取的字符串中间有一个字符,如“2p5”。在将所有这些情况转换为数值时,使用泛型函数处理所有这些情况的正确方法是什么?
import re re.search(r'\d+[p]*\d*', str).group()
x = 'ms2p5' float(x[2:].replace('p', '.'))
p 对于小数点,替换为 第页 . 然后转换成浮点数。例如:
p
第页
.
import re def extract_num(s): return float(re.search(r'\d+p?\d*', s).group().replace('p', '.')) strs = ['ms2p5', 'ms3', 'ms10'] print([extract_num(s) for s in strs])
输出:
[2.5, 3.0, 10.0]
使用 str.join re.findall :
str.join
re.findall
los = ['ms2p5', 'ms3', 'ms10'] print([float('.'.join(re.findall('\d+', i))) for i in los])