2

我有一个这样的 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, mat.plast, sales,替换guta,因此我需要一个正则表达式。mogosanuPRIVATEMAIL

我如何匹配之间的所有内容,@以便我可以替换它

我的想法是

#\,(.*)\@#

非常感谢!

4

3 回答 3

2
Find what: (?<=,)[^,@]+(?=@)
Replace with: PRIVATEMAIL

这是如何运作的?(?<=,)断言匹配从逗号右侧开始。[^,@]+匹配任何非逗号、非 at 字符(尽可能多)。(?=@)断言@匹配的右侧有一个。请注意,实际匹配中既不包含后视,也不包含前瞻,这就是它们未被删除的原因。

请注意,可以省略后视,因为正则表达式引擎尝试从左到右匹配。

你可以在没有环视的情况下做同样的事情,但是你必须写回分隔符:

Find what: ,[^,@]+@
Replace with: ,PRIVATEMAIL@

(同样,您可以从两个字符串中省略前导逗号。)

这就是为什么您的模式不起作用的原因。首先,Notepad++ 不使用正则表达式的分隔符,因此不需要周围#(相反,它们将被视为要匹配的文字字符)。其次.*匹配任何字符(换行符除外,除非您选择该选项)。这包括逗号和 at 符号。所以,将匹配字符串中的第一个逗号。然后.*很乐意消耗一切,直到@(包括介于两者之间的所有值)。这就是为什么我们需要,使用否定字符类从重复字符中排除 。

于 2012-11-28T13:40:21.233 回答
0

/,([A-Za-z]+)\@/HashGuy,似乎与您想要的相符。

于 2012-11-28T13:40:24.837 回答
0
Find what: ,[^\@,]+\@([^\.]+\.[^,]+),
Replace with: ,PRIVATEMAIL@\1,

这不会改变包含@ 的内容,但它不像电子邮件。

于 2012-11-28T13:44:01.293 回答