我正在尝试使用正则表达式将小数(特别是1/2)的实例替换为十进制等效值
string = "7 1/2" re.sub(r'[1/2]', '.5', string)
首先,我认为上面用.5替换了1,/,2的所有实例,而我试图找到并替换整个术语"1/2"
其次,你如何处理分数本身之前的领先空间?
一般解决方案应该如下所示,应该在替换部分中使用lambda函数re.sub
.
>>> import re >>> from __future__ import division >>> s = "7 1/2" >>> re.sub(r'(\d+)/(\d+)', lambda m: str(int(m.group(1))/int(m.group(2))), s) '7 0.5' >>> re.sub(r'(\d+)/(\d+)', lambda m: str(int(m.group(1))/int(m.group(2))), '7 9/2') '7 4.5'
更新:
>>> re.sub(r'^(\d+)\s+(\d+)/(\d+)$', lambda m: str(float(int(m.group(1)) + int(m.group(2))/int(m.group(3)))), '7 9/2') '11.5'