我有一个存储在变量中的SVG,并且希望将数据中的所有路径指令四舍五入到一定的精度,例如3位数字。我通过匹配\d+.
和点\d{2}
之后的前两位数字来匹配所有浮点数,然后想舍入第三位数字。我在第二秒之后捕获了所有数字,最终用一个四舍五入的数字代替了它们。
以下作品,并简单地确认匹配并替换匹配的作品是可行的:
svg = re.sub(r"(\d+\.\d{2})(\d*)", r"\g<1>\g<2>", svg)
我想做的就是这样的伪代码:
svg = re.sub(r"(\d+\.\d{2})(\d*)", r"\g<1>" + doSomethingToGroup2(r"\g<2>"), svg)
如何在替换中访问第二组并操纵其匹配值?
(大概我想对\g<2>
所做的事情与round( int(\g<2>[:1]) / 10 )
相似,尽管这样做的方式可能更优雅-例如匹配整个浮点数,相乘以移动点位置,并通过舍入和除法将点位置移回。)
编辑: 出于好奇,这就是我的解决方法:
svg = re.sub(r"(\d+\.\d*)",
lambda m: str(round(float(m.group(1)) * 10**precision) / (10**precision)),
svg)