[英]Mask domain email address using regular expression
我的客户想通过以下方式屏蔽消息中的电子邮件:
原始电子邮件:
1 userone@domain.com
2 usertwo@domain.com.co --- > 可以是 gov.co, .com.mx .. 等
被屏蔽的电子邮件:
1 u*****e@d****n.com
2 u*****o@d****n.com.co
对于第一种情况,我有这个
string pattern = @"(?<=[\w]{1})[\w-\._\+%]*(?=[\w]{1}@)"; // ---> mask before "@"
string p2 = @"(?<=[\w]{1})[\w-\+%]*(?=[\w]{1}[.])"; // --- > mask after "@"
string result = Regex.Replace(mail, pattern, m => new string('*', m.Length));
string newresult = Regex.Replace(result, p2, m => new string('*', m.Length));
Console.WriteLine("Masked email: {0}", newresult);
并且工作正常:
但是......不适用于第二种情况......
那么,适用于 "@" 之后掩码的两种情况的正则表达式是什么?
请参阅我的答案底部的编辑,了解可以在 .net 中完成的第二种方法(更短)。
(?:(?:^|(?<=@))([^.@])|\G(?!\A))[^.@](?:([^.@])(?=[.@]))?
更换: $1*$2
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(?:(?:^|(?<=@))([^.@])|\G(?!\A))[^.@](?:([^.@])(?=[.@]))?";
string substitution = @"$1*$2";
string input = @"userone@domain.com
usertwo@domain.com.co";
RegexOptions options = RegexOptions.Multiline;
Regex regex = new Regex(pattern, options);
Console.WriteLine(regex.Replace(input, substitution));
}
}
userone@domain.com
usertwo@domain.com.co
u*****e@d****n.com
u*****o@d****n.com.co
(?:(?:^|(?<=@))([^.@])|\\G(?!\\A))
匹配以下任意一项
(?:^|(?<=@))([^.@])
匹配以下内容
(?:^|(?<=@))
匹配以下任意一项
^
在行首断言位置(?<=@)
正向后视确保前面是 at 符号字符@
字面意思([^.@])
将列表中不存在的任何字符(除点号.
或 at 符号@
字符以外的任何字符)捕获到捕获组 1\\G(?!\\A)
在上一场比赛结束时断言位置[^.@]
匹配列表中不存在的任何字符(除点号之外的任何字符.
或 at 符号@
字符)(?:([^.@])(?=[.@]))?
匹配以下零或一次
([^.@])
将列表中不存在的任何字符(除点号.
或 at 符号@
字符以外的任何字符)捕获到捕获组 2(?=[.@])
正向前瞻确保后面是一个点.
或在符号@
字符字面上此模式获得与我的原始答案相同的结果(除非给出长度为 2 的字符串: ie un@domain.com
被保留,而原始答案将使此u*@domain.com
)。
C# (.net) 支持可变长度的lookbehinds。 感谢@Gurman的评论。 他走在正确的轨道上,只是可能不知道 .net 支持可变长度的lookbehinds。
(?<=(?:^|@)[^.]*)\B.\B
(?<=(?:^|@)[^.]*)
正向后视确保后面的匹配
(?:^|@)
匹配行断言的开头或符号@
处的文字[^.]*
匹配除点字符以外的任何字符.
字面上地\\B
匹配单词边界不匹配的位置.
匹配任何字符\\B
匹配单词边界不匹配的位置 包含电子邮件的正则表达式.
在本地部分(请参阅此处使用):
(?<=^[^@]+)[^@](?=[^@])|(?<=@[^.]+)[^.](?=[^.])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.