2017-04-26 72 views
0

我有一個文本文件,我需要替換幾個單詞。 文件內容在python中使用re sub進行組替換

user "username" 
password "[email protected]" 
dbname "SOME_DB_NAME" 

我想這

r = re.compile('{}\s"([\[email protected]#$%^&*]+)"'.format('password')) 
r.sub('new_passw0rd', file) 

在結果re.sub替換這是由正則表達式匹配的所有符號如何更換唯一匹配的羣體?

+1

捕獲您需要保留的內容並在替換模式中使用反向引用。看[這個正則表達式演示](https://regex101.com/r/V9qCBT/2)。你在尋找這個結果嗎,「P @ ssword」password'? –

+0

'r.sub('password'new_passw0rd'',文件)' –

+0

@WiktorStribiżew我在尋找此結果: 密碼「new_passw0rd」 –

回答

1

正則表達式匹配一些文本字符串,並且有一個捕獲機制可以讓存儲子級匹配,以便在找到匹配項後可以參考/重用。

因此,抓住你需要保持和匹配的其餘部分。在你的情況下,你需要保留password,whitespaces和"圍繞新密碼。

使用

import re 

s = """ 
user "username" 
password "[email protected]" 
dbname "SOME_DB_NAME" 
""" 
r = re.compile(r'({}\s")[\[email protected]#$%^&*]+"'.format('password')) 
print(r.sub(r'\1new_passw0rd"', s)) 

Python demo

輸出:

user "username" 
password "new_passw0rd" 
dbname "SOME_DB_NAME" 

這裏,(password\s")比賽和捕捉password +一個空格+ "爲1組(即後來被稱爲與\1反向引用 - 注意r''原始字符串聲明)和[\[email protected]#$%^&*]+"只匹配1+單詞和一些特殊字符跟在"(也可以被捕獲,但我只是在替換中使用了一個"將它放回到結果中)。

相關問題