如何使用python

时间:2019-01-24 08:20:33

标签: python regex match

我有一个存储在变量中的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)

0 个答案:

没有答案