我需要检查包含电子邮件列表的字符串。这些电子邮件通常用逗号分隔,但我需要检查该列表中的某个地方是否有逗号以外的分隔符。这是一个例子:
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#来解决我的问题有点迷失。我需要捕获这个正则表达式的两个匹配之间的东西并替换为逗号。
有人能帮帮我吗? 谢谢。
答案 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的解决方案。
谢谢大家。