我有这样的CSV:
43132,000.121.211.254,,NO DATA,office@mail.com,VIEW,2012-11-28 13:17:31
43126,000.123.54.1,,NO DATA,mat.plast@mail.com,VIEW,2012-11-28 13:04:45
43121,000.24.74.155,,NO DATA,sales@mail.mail,VIEW,2012-11-28 12:58:38
43118,000.115.243.218,,NO DATA,guta@mail.com,VIEW,2012-11-28 12:55:59
43116,80006.124.167.204,,NO DATA,mogosanu@mail.ro,VIEW,2012-11-28 12:54:11
我要做的是用office
替换notepad ++ mat.plast
,sales
,guta
,mogosanu
,PRIVATEMAIL
因此我需要一个正则表达式。
如何匹配,
和@
之间的所有内容,以便我可以替换它
我的想法就像是
#\,(.*)\@#
非常感谢!
答案 0 :(得分:2)
Find what: (?<=,)[^,@]+(?=@)
Replace with: PRIVATEMAIL
这是如何工作的? (?<=,)
断言匹配开始于逗号右侧。 [^,@]+
匹配任何非逗号,非at字符(尽可能多)。 (?=@)
声称比赛右侧有@
。请注意,实际匹配中不包括lookbehind和lookahead,这就是为什么它们不会被删除。
请注意,可以省略lookbehind,因为正则表达式引擎尝试从左到右匹配。
你可以在没有外观的情况下做同样的事情,但是你必须回写分隔符:
Find what: ,[^,@]+@
Replace with: ,PRIVATEMAIL@
(同样,您可以省略两个字符串中的前导逗号。)
这就是为什么你的模式不起作用的原因。首先,Notepad ++不对正则表达式使用分隔符,因此不需要周围的#
(而是将它们视为要匹配的文字字符)。其次.*
匹配任何字符(换行符除外,除非您选择该选项)。这包括逗号和标志。因此,
将匹配字符串中的第一个逗号。然后.*
很乐意消耗所有内容,直到@
(包括其间的所有值)。这就是为什么我们需要使用否定的字符类从重复的字符中排除,
。
答案 1 :(得分:0)
/,([A-Za-z]+)\@/
似乎符合您的要求,HashGuy。
答案 2 :(得分:0)
Find what: ,[^\@,]+\@([^\.]+\.[^,]+),
Replace with: ,PRIVATEMAIL@\1,
这不会改变包含@的东西,但它不像电子邮件。