在C#中的字符串中拆分子串

时间:2014-11-03 15:20:51

标签: c# regex string email

我需要检查包含电子邮件列表的字符串。这些电子邮件通常用逗号分隔,但我需要检查该列表中的某个地方是否有逗号以外的分隔符。这是一个例子:

email1@email.com,email2@email.com,email3@email.com#email4@email.com

我需要识别不同的字符并替换为逗号。

我不能只使用正则表达式来识别逗号以外的特殊字符并替换它们,因为电子邮件可能包含其中一些字符。所以我需要在两封电子邮件之间找到一些东西。 我做了以下正则表达式来识别电子邮件,我相信它将涵盖大部分电子邮件:

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-z0-9]+(\.[a-z0-9]+)+$

但是我对使用C#来解决我的问题有点迷失。我需要捕获这个正则表达式的两个匹配之间的东西并替换为逗号。

有人能帮帮我吗? 谢谢。

5 个答案:

答案 0 :(得分:7)

您的问题无法解决,因为分隔符并非始终由决定。

考虑此输入,其中分隔符为.

user@server.co.uk.user@otherServer.com

这是:

user@server.co | uk.user@otherServer.com

或是它:

user@server.co.uk | user@otherServer.com

或者这个输入:

user@server.intuser@otherServer.com

是分隔符u

user@server.int | ser@otherServer.com

或分隔符t

user@server.in | user@otherServer.com

如果您不愿意接受一定比例的失败,那么您最好先寻找不接收此输入的方法。

答案 1 :(得分:0)

我无法想到实现这一目标的优雅方式。如果你不介意一个不优雅的解决方案,你可以用同样的TLD加逗号替换any top level domain加一个字符。

您最终会将“.com#”替换为“.com”,“。eu *”替换为“.eu”,依此类推。可以使用Regex进行替换,因此您的迭代将与您要替换的TLD数量相同。

答案 2 :(得分:0)

您可以尝试的一个选项是使用@符号拆分传入的字符串,并检查结果数组的每个部分是否都有逗号 - 除了第一个和最后一个。

如果您发现缺少逗号,请在该元素中搜索.com或.net或.org,并在该字符后添加逗号。

最后,只需将列表与@符号

拼接在一起

答案 3 :(得分:0)

([^@,]+@[^.]+\.\w{3}(?!,|$)).

试试这个。$1,。见。演示。

http://regex101.com/r/tF4jD3/15

P.S这适用于格式为something@something.com的电子邮件ID。

答案 4 :(得分:0)

感谢您的回复。

字符串必须只有逗号作为分隔符。

我提到的例子只是为了说明,因为这个列表是使用一个jquery插件生成的,该插件只有在允许将其保存在列表中之后才会被注意到" email1 @ email.comemail2 @ email.com"或非标准的任何其他组合" email1 @ email.com,email2 @ email.com"。

我主要担心的是" email1 @ email.com / email2 @ email.com"

我试图自动搜索这种不一致性,作为预防。

我想过使用正则表达式,但我真的不知道它是否是最好的方法。 我现在在想,因为它不是系统的关键部分,只是使用无效字符列表进行替换会更简单。

但我会尝试vks的解决方案。

谢谢大家。