1

我有一个包含十进制数字的文本文件,并且想要四舍五入任何有小数 >= 0.5,否则我想截断小数,例如,23.7897变成2417.2395变成17

<0.5情况对于 : 来说不是问题re.sub

re.sub(r'(\d+)\.[0-4]\d*', r'\1', line)

但是,对于 >=0.5情况,我想知道是否有办法\1在替换期间以某种方式操纵捕获组?它是否存储在任何地方以便可以发送到函数,例如:

re.sub(r'(\d+)\.[5-9]\d*', roundUp('\1'), line)

whereroundUp()返回一个表示值的字符串\1 + 1

当然有一种方法可以\1在替换期间增加 inline ,而无需循环匹配 from findall,增加整数部分,然后用重新查找模式re.sub并将其替换?

4

1 回答 1

2

您可以使用任意可调用对象进行替换,那么这对您有用吗?

re.sub(r'\d+\.\d*', lambda match: str(int(round(float(match.group(0))))), line)
于 2012-11-03T04:49:54.817 回答