I\'m trying to get re.sub
to replace a pattern specified with a value for example
for lines in f:
pattern=\'\\${2}\'+key[0]+\'\\${2}\'
r
You are assigning the result of re.sub
back to a variable, right? e.g.
lines = re.sub(pattern, key[1], lines)
It's a string, so it can't be changed (strings are immutable in Python), therefore a new string is created and returned to you. If you don't assign it back to a name, you will lose it.
If you have a text, you can run re.sub() directly on the whole text as follows:
import re
ss = '''that's a line
another line
a line to $$test$$
123456
here $$test$$ again
closing line'''
print(ss,'\n')
key = {0:'test', 1:'replace'}
regx = re.compile('\$\${[0]}\$\$'.format(key))
print( regx.sub(key[1],ss) )
.
If you read a file, you should have interest to read the whole file and put it in an object ss before runing re.sub() on it, instead of reading and replacing line after line
.
And if you have a list of lines , you must process as follows:
import re
key = {0:'test', 1:'replace'}
regx = re.compile('\$\${[0]}\$\$'.format(key))
lines = ["that's a line",
'another line',
'a line to $$test$$',
'123456',
'here $$test$$ again',
'closing line']
for i,line in enumerate(lines):
lines[i] = regx.sub(key[1],line)
Otherwise a line containing '$$test$$' wouldn't be modified:
import re
key = {0:'test', 1:'replace'}
regx = re.compile('\$\${[0]}\$\$'.format(key))
lines = ["that's a line",
'another line',
'a line to $$test$$',
'123456',
'here $$test$$ again',
'closing line']
for line in lines:
line = regx.sub(key[1],line)
print (lines)
result
["that's a line", 'another line', 'a line to $$test$$', '123456', 'here $$test$$ again', 'closing line']