向re.search Python的结果中添加变量并替换

向re.search Python的结果中添加变量并替换,python,python-3.x,Python,Python 3.x,我试图在某些字符之后和某些字符之前找到一个整数,并在其中添加一个整数 我有这个 import re filedata = None with open('doc.txt', 'r') as file : filedata = file.read() count = int(filedata.count('~')) # 454 m = re.search('~RR\*(\d+)\*', filedata); print(m) with open('docresult.txt', 'w'

我试图在某些字符之后和某些字符之前找到一个整数,并在其中添加一个整数

我有这个

import re
filedata = None

with open('doc.txt', 'r') as file :
  filedata = file.read()

count = int(filedata.count('~')) # 454

m = re.search('~RR\*(\d+)\*', filedata); print(m)

with open('docresult.txt', 'w') as file:
  file.write(filedata)</pre>
重新导入
filedata=None
打开('doc.txt','r')作为文件:
filedata=file.read()
count=int(filedata.count('~'))#454
m=重新搜索(“~RR\*(\d+)\*”,filedata);打印(m)
打开('docresult.txt','w')作为文件:
file.write(文件数据)
所以我要做的就是把
count
添加到
~RR\*XXX*
之间的任何数字上,然后替换它

因此,如果一开始我有
~RR*120*
,我的计数是50,我希望新文件显示
~RR*170*


我也尝试过使用
re.compile
,但没有结果。

不确定您的计算结果(例如,120+50如何产生175),但这里有一种方法,当整数与奇怪的
~RR**
模式匹配时,可以使用带有替换函数而不是替换字符串的
re.sub

import re

global count
count = 50
filedata = "hello ~RR*120* foo ~RR*40*"

def repl_function(m):
    return str(int(m.group(1))+count+len(m.group(1)))

filedata = re.sub('(?<=~RR\*)(\d+)(?=\*)', repl_function, filedata)

print(filedata)
在匹配时调用替换函数,匹配对象作为唯一参数。它必须返回替换字符串

import re

global count
count = 50
filedata = "hello ~RR*120* foo ~RR*40*"

def repl_function(m):
    return str(int(m.group(1))+count+len(m.group(1)))

filedata = re.sub('(?<=~RR\*)(\d+)(?=\*)', repl_function, filedata)

print(filedata)

我们看到这些数字已被提取、计算并替换回原始字符串。我使用了非消费(lookback/lookahead)组,因此只将数字传递给替换字符串,并且包装模式保留在更新的字符串中。

感谢您的建议,现在可以正常工作了。非常感谢你的帮助!!