Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python基于模式查找和替换数字_Python_Parsing - Fatal编程技术网

Python基于模式查找和替换数字

Python基于模式查找和替换数字,python,parsing,Python,Parsing,我有一个字符串,我想找到并替换其中的一些数字。即,其中有多个重复的“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 这给了我结果列表,但我不知道如何更改字符串。 我该怎么做

我有一个字符串,我想找到并替换其中的一些数字。即,其中有多个重复的“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
这给了我结果列表,但我不知道如何更改字符串。
我该怎么做呢?

您可以向传递一个函数,该函数将获取匹配的模式
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))

完美的谢谢你,回答很好,也很容易重用:)这会截断而不是四舍五入到最接近的整数,但只要OP自己能弄清楚怎么做(提示:
round
builtin按它说的做,请尝试
help(round)
了解更多信息),这应该是他所需要的。我重新阅读了OP的问题,我可以看到我的示例代码与请求相差很远。当我回到桌面浏览器时,我会修复它,但这个想法仍然适用:)