我正在尝试使用正则表达式将小数(特别是1/2)的实例替换为十进制等值
string = "7 1/2"
re.sub(r'[1/2]', '.5', string)
首先,我认为上面用.5替换了1,/,2的所有实例,而我试图找到并替换整个术语“1/2”
其次,你如何处理分数本身之前的领先空间?
答案 0 :(得分:8)
一般解决方案应如下所示,应在re.sub
的替换部分使用lambda函数。
>>> 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'
答案 1 :(得分:2)