2014-11-03 19 views
2

我需要检查包含电子邮件列表的字符串。这些电子邮件通常以逗号分隔,但我需要检查该列表中是否有逗号以外的分隔符。下面是一个例子:在C中的字符串中拆分子串#

[email protected],[email protected],[email protected]#[email protected] 

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

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

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

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

任何人都可以帮助我吗? 谢谢。

+4

你是什么意思?这是一个随机角色吗?我猜想它不应该在那里。 如果是随机的,请检查所有有效字符,并用逗号替换无效字符。 如果不是:'emails.Replace('#',',')':p – joppiesaus 2014-11-03 15:22:16

+0

为什么不仅匹配有效的电子邮件地址并过滤掉其余的邮件地址。 – 2014-11-03 15:22:45

+7

如果分隔符可能是电子邮件中名称的任何有效字符,则说明存在严重问题 – dariogriffo 2014-11-03 15:23:11

回答

0

我想不出一种优雅的方式来实现这一点。如果您不介意使用不雅的解决方案,则可以用相同的顶级域名加逗号代替any top level domain加一个字符。

你会落得 “.COM#” 替换为 “.COM ”“ .eu域名*” 代替带有 “.eu域名,” 等等。可以使用Regex进行替换,因此您的迭代将与要替换的TLD数量相同。你可以尝试

+0

那么多级域名呢? – 2014-11-03 15:38:20

+2

由于'.co'也是一个域名,你最终也会用'.co,'替换'.com',并且你还将用'user.com @ server.net.com'替换.com,server.net,com' – Rotem 2014-11-03 15:40:18

0

一种选择是使用@符号拆分进入的字符串,并检查结果数组的每个部分有INT逗号 - 除了第一个和最后。

如果你找到一个缺少逗号做的.com或.net或.org在元素和字符后坚持一个逗号的搜索。

最后只是运行以@符号

+1

那么.com.eu呢? – 2014-11-03 15:39:03

7

你的问题是无法解决的,因为分隔符不能总是由决定一起回来拼接列表。

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

[email protected]@otherServer.com 

是这样的:

[email protected] | [email protected] 

或者是:

[email protected] | [email protected] 

或者此输入:

[email protected]@otherServer.com 

它是分隔符u

[email protected] | [email protected] 

或者分隔符t

[email protected] | [email protected] 

如果你不愿意接受失败的一定比例,你最好关闭寻找方式不接受这个输入开始。

0

感谢您的回复。

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

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

我最关心的是像“EMAIL1 @ email.com/EMAIL2 @ email.com”

我试图自动为这种不一致的搜索,预防案件。

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

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

谢谢大家。

+0

未来,请编辑您的问题来介绍更新,而不是发布答案。 – Rotem 2014-11-03 16:24:26