0

このような文字列があり、 の前後に 0 個以上の空白があり、文字列の最後に=0 個または 1 個あります。### comment

log_File = a.log   ### the path for log
log_level = 10 

の右側の文字列を置き換えたいと思います=。たとえば、次のように設定します。

log_File = b.log   ### the path for log
log_level = 40 

import re
s="log_File = a.log   ### the path for log"
re.sub("(?<=\s)\w+\S+",'Hello",s)

上記のコードは、 = の後のすべての文字列を置き換えます こんにちは、 の後の文字列を置き換えたくありません###。これを実装するにはどうすればよいですか。

4

2 に答える 2

-1

次のコードを試してください:

>>> re.sub(r'(?<!#)=(.*?)(?=\s*#|$)', r'= Hello', s, 1)
'log_File = Hello   ### the path for log'

正規表現を使用しない場合 (Inbar Rose のバージョンを変更)

def replace_value(s, new):
    content, sep1, comment = s.partition('#')
    key, sep2, value = content.partition('=')
    if sep2: content = key + sep2 + new
    return content + sep1 + comment

assert replace_value('log_File = b', ' Hello') == 'log_File = Hello'
assert replace_value('#log_File = b', ' Hello') == '#log_File = b'
assert replace_value('#This is comment', ' Hello') == '#This is comment'
assert replace_value('log_File = b # hello', ' Hello') == 'log_File = Hello# hello'
于 2013-07-08T07:26:01.577 に答える