gpt4 book ai didi

c# - 邮箱地址拆分

转载 作者:可可西里 更新时间:2023-11-01 08:58:04 25 4
gpt4 key购买 nike

所以我有一个字符串,我需要用分号分隔

电子邮件地址:"one@tw;,.'o"@hotmail.com;"some;thing"@example.com

两个电子邮件地址均有效

所以我想要一个List<string>以下:

  • "one@tw;,.'o"@hotmail.com
  • "some;thing"@example.com

但我目前拆分地址的方式不起作用:

var addresses = emailAddressString.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Trim()).ToList();

因为多个;字符我最终得到无效的电子邮件地址。

我尝试了几种不同的方法,甚至在字符串包含引号的情况下继续工作,然后找到 ; 的索引。角色并以这种方式解决问题,但这真的很痛苦。

有没有人有更好的建议?

最佳答案

假设不允许使用双引号,“at”符号前的开始和结束引号除外 @ , 您可以使用此正则表达式来捕获电子邮件地址:

((?:[^@"]+|"[^"]*")@[^;]+)(?:;|$)

这个想法是捕获一个未引用的 [^@"]+或引用 "[^"]*" @ 之前的部分, 然后捕获分号 ; 之前的所有内容或结束 anchor $ .

Demo of the regex.

var input = "\"one@tw;,.'o\"@hotmail.com;\"some;thing\"@example.com;hello@world";
var mm = Regex.Matches(input, "((?:[^@\"]+|\"[^\"]*\")@[^;]+)(?:;|$)");
foreach (Match m in mm) {
Console.WriteLine(m.Groups[1].Value);
}

这段代码打印

"one@tw;,.'o"@hotmail.com
"some;thing"@example.com
hello@world

Demo 1.

如果你想在双引号内允许转义双引号,你可以使用更复杂的表达式:

((?:(?:[^@\"]|(?<=\\)\")+|\"([^\"]|(?<=\\)\")*\")@[^;]+)(?:;|$)

其他一切都保持不变。

Demo 2.

关于c# - 邮箱地址拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651640/

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