Python正则表达式分数

时间:2015-12-16 05:37:36

标签: python regex

我正在尝试使用正则表达式将小数(特别是1/2)的实例替换为十进制等值

string = "7 1/2"
re.sub(r'[1/2]', '.5', string)

首先,我认为上面用.5替换了1,/,2的所有实例,而我试图找到并替换整个术语“1/2”

其次,你如何处理分数本身之前的领先空间?

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)

作为正则表达式的替代方法,如果总是每个字符串都有一个数字,并且小数部分与整数部分之间用空格分隔,则可以使用enter image description here模块执行转换:

locallhost:3354//En/News/NewsByCategory/12345

<强>输出

7.5
1.5
22.9545454545
123.0
123.45