2013-10-28 93 views
-3

示例如何將.com置於正則表達式的郵件末尾?

我收到了朋友的電子郵件列表,但問題是有些人以完整形式鍵入電子郵件([email protected])和某些人鍵入(xxx @ xxx without .com)。我想把它改進成相同的格式。如果我想在vi上編輯它們,我該如何改進它?

在我emaillist.txt

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

我嘗試:

我試圖用一個簡單的正則表達式像這樣趕上像XXX @ XXX

:%s/\(\w*@\w*\)/\0.com/g 
or 
:%s/\(\w*@\w*[^.com]\)/\0.com/g 

但問題的模式這是正則表達式包括[email protected]

而結果變成這樣後,我恩之三以上

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

命令所以,對取代後我的期望是應該是這樣的:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

如何在這種情況下使用正則表達式?

+4

詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:堆棧溢出問題清單 – Marcin

+1

是什麼讓您認爲每個電子郵件地址應以'.com'結尾? – 2013-10-28 20:45:53

+4

@Marcin我認爲有一個不幸的先例,「給我____的正則表達式」已經可以接受了。 – Mathletics

回答

3

你可以使用這個命令:

%s/^.*\(\.com\)\@<!$/\0\.com/g 

的搜索模式的每一行不.com結束比賽(我剛從Vim: Find any line NOT ending in "WORD"複製粘貼的recipy),並用自身替換它添加了.com

+1

您不需要在替換中轉義點,也不需要全局標誌,因爲只有一個替換會在一行中發生。 Vim golf:':%s/\ v ^(\。com)@<!$ /。com'甚至更短':v/\。com $/s/$ /。com' –

3

爲gmail.com沒有必要進一步更換所以請更換爲僅限Gmail這樣

/(.*)(?!\.com)\n/\.com/msi (i considered as each mail in one new line.) 

請不要-vte月我試圖解釋

相關問題