1

全体に小数を含むテキストファイルがあり、小数が >= あるものを切り上げたいと思っていました。そうでない場合は、0.5小数を切り捨てます。23.78972417.239517

< の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からの一致をループせずに、置換中にインラインでインクリメントする方法がありfindall、整数部分をインクリメントしてから、パターンを再検索して置換する方法re.subはありますか?

4

1 に答える 1

2

代わりに任意の callable を使用できますが、これはうまくいきますか?

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