我试图在某些字符之后和某些字符之前找到一个整数,然后添加一个整数。
我有这个。
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
,但没有结果。
答案 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)组,因此只有数字被传递给替换字符串,并且包装模式保存在更新后的字符串中。