2015-03-08 53 views
1
from re import compile, MULTILINE, sub 

data= """\ 
# comment1 
key1=value1 
key2=value2 # comment2 
key3=value3 # comment3 #""" 

print("----------------------- before sub") 
print(data) 
print("----------------------- after") 
print(sub(compile("^(.*)(#.*)$", MULTILINE), "\\2\\n\\1", data).strip()) 

您認爲可以做得更好嗎(只有一行)?
結果將內嵌評論移到前一行

------------------------- before sub 
# comment1 
key1=value1 
key2=value2 # comment2 
key3=value3 # comment3 # 
------------------------- after 
# comment1 

key1=value1 
# comment2 
key2=value2 
# 
key3=value3 # comment3 

我不知道做的更好。
正如你看到的,只有註釋2被正確處理(行尾空格除外)。

回答

3

嘗試^(\s*\S+\s*)(#[^\n]*)並替換爲\1\n\2

print(re.sub(r"^(\s*\S+\s*)(#[^\n]*)", re.MULTILINE), r"\2\n\1", data) 

See demo on Regex101

+0

@BhargavRao感謝名單了很多:) – vks 2015-03-08 19:02:27

+1

下一次你忘了'#python' ....ಠ_ಠ...只要看看會發生什麼 – 2015-03-08 19:03:29

+1

我想我將不得不把它如果我想念它,它不會再發生:P – vks 2015-03-08 19:05:36