2016-09-09 18 views
0

我不想寫和問這個論壇,但我被卡住了,那本書應該是針對初學者的書,但它不是什麼...用正則表達式替換帶有sub()方法的字符串

反正...在下面的字符串:

'Agent Alice told Agent Bob that Agent Steve was a double agent.' 

我想只顯示代理人的名字的第一個字母。所以我最終得到的是:

'Agent A**** told Agent B**** that Agent S**** was a double agent.' 

我試過使用分組,如書中,但它不工作。

namesRegex = re.compile(r'\w?([A-Z])') 
mo = namesRegex.sub(r'\1****', 'Agent Alice told Agent Bob that Agent 
Steve was a double agent.') 
print(mo) 

另外,我歡迎任何建議更多的資源提前這個話題謝謝...

+0

這不起作用。你有錯誤還是? –

+0

我得到這個:*** gent ****蝨子告訴**** gent **** ob那**** gent **** teve是一個雙重代理人。 –

回答

1

你可以用一下背後?<=語法如下:

namesRegex = re.compile(r'(?<=Agent\s[A-Z])\w+') 
mo = namesRegex.sub(r'****', 'Agent Alice told Agent Bob that Agent Steve was a double agent.') 

mo 
# 'Agent A**** told Agent B**** that Agent S**** was a double agent.' 

這將取代任何單詞字符\w+包括字母數字字符和下劃線_之後的模式Agent\s[A-Z]****。如果不能保證代理人的名字以大寫字母​​開頭,那麼這將是一個限制較少的選項。

+0

謝謝。是的,工作。所以?<=是在模式之後?這不在書中。 –

+0

你可以在這裏查看http://www.regular-expressions.info/lookaround.html,這是一個看起來後面的語法,這意味着只能在'(?<= ...)'中指定的模式之後替換單詞。 – Psidom