Re.sub not working for me

前端 未结 2 1960
没有蜡笔的小新
没有蜡笔的小新 2020-11-27 08:47

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         


        
相关标签:
2条回答
  • 2020-11-27 08:57

    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.

    0 讨论(0)
  • 2020-11-27 09:04

    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']
    
    0 讨论(0)
提交回复
热议问题