gpt4 book ai didi

c# - 使用正则表达式屏蔽域电子邮件地址

转载 作者:太空狗 更新时间:2023-10-30 01:13:53 28 4
gpt4 key购买 nike

我的客户想按照这种方式屏蔽消息中的电子邮件:

原始邮件:

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);

并且工作正常:

MaskedEmail first case

但是...不适用于第二种情况...

那么,对于“@”之后的掩码,适用于两种情况的正则表达式是什么?

最佳答案

原始答案

请参阅我的答案底部的编辑,了解可以在 .net 中完成此操作的第二种方法(更短)。

代码

See regex in use here

(?:(?:^|(?<=@))([^.@])|\G(?!\A))[^.@](?:([^.@])(?=[.@]))?

替换:$1*$2

用法

See code in use here

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 符号字符 @从字面上看
      • ([^.@])捕获列表中不存在的任何字符(除点 . 或符号 @ 字符外的任何字符)到捕获组 1
    • \G(?!\A)在上一场比赛结束时断言位置
  • [^.@]匹配列表中不存在的任何字符(除点 . 或符号 @ 字符以外的任何字符)
  • (?:([^.@])(?=[.@]))?匹配以下零次或一次
    • ([^.@])捕获列表中不存在的任何字符(除点 . 或符号 @ 字符外的任何字符)到捕获组 2
    • (?=[.@])正向前瞻确保后面是一个点 .或在标志 @字面意思


编辑

此模式获得与我的原始答案相同的结果(除非给出长度为 2 的字符串:i.e. un@domain.com 保持不变,而原始答案将成为 u*@domain.com)。

C# (.net) 支持可变长度回顾。感谢@Gurman与他的评论。他走在正确的轨道上,只是可能不知道 .net 支持可变长度回顾。

代码

See regex in use here

(?<=(?:^|@)[^.]*)\B.\B

解释

  • (?<=(?:^|@)[^.]*)积极的后视确保后续匹配
    • (?:^|@)匹配行断言的开头或符号 @ 处的文字
    • [^.]*匹配除点字符 . 以外的任何字符从字面上看
  • \B匹配单词边界不匹配的位置
  • .匹配任意字符
  • \B匹配单词边界不匹配的位置

编辑2

包含 . 的电子邮件的正则表达式在本地部分(请参阅此处的使用):

(?<=^[^@]+)[^@](?=[^@])|(?<=@[^.]+)[^.](?=[^.])

关于c# - 使用正则表达式屏蔽域电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47637207/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com