【问题标题】:Python find and replace numbers based on patternPython根据模式查找和替换数字
【发布时间】:2025-11-24 16:10:01
【问题描述】:

我有一个字符串,我想查找并替换其中的一些数字。即,其中有多个重复的“v = 324\n”,具有不同的值。现在我想将所有这些数字除以n(四舍五入到最接近的整数)并将其保存为新字符串。

目前我正在使用解析包:

n = 10
s = "this is v = 2342\n and another v = 231\n and some stuff..."
for r in findall("v = {:d}\\n", s):
    print r

这给了我结果列表,但我不知道如何更改字符串。 我该怎么做?

【问题讨论】:

    标签: python parsing


    【解决方案1】:

    您可以将一个函数传递给re.sub,它采用匹配的模式samples = {:d}\\n(我必须更新)并以某种方式计算它。这是一个演示:

    import re
    
    def sampleRounder(match):
        return str(int(float(match.group(1)))) #base=10
    
    s = "this is v = 2342.2\n and another v = 231.003\n and some stuff..."
    
    print(re.sub("v = ([0-9]*\.[0-9]+|[0-9]+)\\n", sampleRounder, s))
    

    【讨论】:

    • 完美!谢谢,很好的答案,易于重复使用:)
    • 这会截断而不是四舍五入到最接近的 int,但只要 OP 可以自己弄清楚如何做到这一点(提示:round 内置函数按照它说的做,试试help(round)更多),这应该是他所需要的。
    • 我重新阅读了 OP 的问题,我可以看到我的示例代码与请求相差甚远。当我回到桌面浏览器时,我会修复它,但这个想法仍然成立:)