2016-12-27 97 views

回答

3
>>> s = ''' 
     // DO NOT REPLACE ME // 
     Anything might be here. Numbers letters, symbols, and other strings. 
     // DO NOT REPLACE ME EITHER // 
     ''' 
>>> print(s) 

     // DO NOT REPLACE ME // 
     Anything might be here. Numbers letters, symbols, and other strings. 
     // DO NOT REPLACE ME EITHER // 
>>> import re 
>>> start = '// DO NOT REPLACE ME //' 
>>> end = '// DO NOT REPLACE ME EITHER //' 
>>> replacement = 'stuff' 
>>> match = re.match(r'(.+%s\s*).+?(\s*%s.+)' % (start, end), s, re.DOTALL) 
>>> match.groups() 
('\n  // DO NOT REPLACE ME //\n  ', '\n  // DO NOT REPLACE ME EITHER //\n  ') 
>>> new = match.group(1) + replacement + match.group(2) 
>>> print(new) 

     // DO NOT REPLACE ME // 
     stuff 
     // DO NOT REPLACE ME EITHER // 

可能會引起問題,如果startend包含的特殊字符。在這種情況下,他們沒有。

0
start = s.find('// DO NOT REPLACE ME //') + len('// DO NOT REPLACE ME //') 
end = s.find('// DO NOT REPLACE ME EITHER //') 
new_string = s[:start] + replacement + s[end:] 

我希望它能幫助

+0

這是不行的,因爲它不是基於行 - 。 OP想要替換兩條線*之間的*。 – ekhumoro

+0

@ekhumoro這這種情況下,我想你可以做'new_string = 「」。加入([S [:開始], '\ n',更換, '\ n',S [結束:])' –