-3

例子

我收到了朋友的电子邮件列表,但问题是有些人输入了完整格式的电子邮件 (xxx@example.com),有些人输入了 (xxx@xxx without .com)。我想将其改进为相同的格式。如果我想在 vi 上编辑它们,我该如何改进?

在我的 emaillist.txt

foo@gmail
bar@hotmail.com
bas@gmail
qux@abc.com
mike@abc
john@email

我的尝试:

我尝试使用像这样的简单正则表达式来捕捉像 xxx@xxx 这样的模式

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

但问题是这个正则表达式也包括 xxx@example.com

我输入上面的命令后结果变成了这样

foo@gmail.com
bar@hotmail.com.com
bas@gmail.com
qux@abc.com.com
mike@abc.com
john@email.com

所以,我替换后的期望应该是这样的:

foo@gmail.com
bar@hotmail.com
bas@gmail.com
qux@abc.com
mike@abc.com
john@email.com

在这种情况下如何使用正则表达式?

4

2 回答 2

3

对于 gmail.com,不需要进一步替换,所以只替换像这样的 gmail

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

请不要-vte mar我试图解释

于 2013-10-28T21:32:54.113 回答
3

你可以使用这个命令:

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

搜索模式匹配不以结尾的每一行.com(我只是从 Vim 复制粘贴 recipy :查找任何不以 "WORD" 结尾的行)并将其替换为.com添加的自身。

于 2013-10-29T06:34:37.197 回答