2016-12-27 16 views
1

私は、この文字列Python:文字列を置き換えずに2つの文字列間のすべてを置き換えるにはどうすればいいですか?

str = ''' 
     // DO NOT REPLACE ME // 
     Anything might be here. Numbers letters, symbols, and other strings. 
     // DO NOT REPLACE ME EITHER // 
     ''' 

を持っている私はそれらの2行の間にあるものは何でも交換したいが、私はこれらの文字列を置換する必要はありません。これはどうすればいいですか? startまたはendは特別な正規表現文字が含まれている場合

答えて

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 // 

は問題を起こすことがあります。この場合、彼らはそうしない。

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は、2本の線の間の*を置き換えることを望んでいます。 – ekhumoro

+0

@ekhumoroこの場合、 'new_string =" ".join([s [:start]、 '\ n'、replacement、 '\ n'、s [end:])'を実行することができます。 –

関連する問題