将变量添加到re.search Python的结果并替换

时间:2017-02-02 21:35:42

标签: 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') as file:
  file.write(filedata)</pre>

所以我要完成的是将count添加到~RR\* XXX *之间的任何数字并替换它。

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

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

1 个答案:

答案 0 :(得分:0)

不确定您的计算(例如120 + 50如何能够产生175),但是当使用In [8]: pd.to_datetime('Jan 11, 2017 9:00 PM').day Out[8]: 11 In [9]: pd.to_datetime('Jan 11, 2017 9:00 PM').month Out[9]: 1 匹配您的奇怪~RR*<a number>*模式时,这是一种对整数执行计算的方法使用替换函数而不是替换字符串。

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

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)

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