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

本文关键字:字符串 拆分 | 更新日期: 2023-09-27 18:29:06

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

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#。我需要捕获这个正则表达式的两个匹配项之间的内容,并替换为逗号。

有人能帮我吗?非常感谢。

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

您的问题无法解决,因为分隔符不能总是由人员确定。

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

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

如果你不愿意接受一定比例的失败,你最好从一开始就想办法不接受这种输入。

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

试试这个。替换为$1,。请参阅演示。

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

p.S这将适用于格式为something@something.com的电子邮件id。

我想不出一种优雅的方式来实现这一点。如果你不介意一个不雅的解决方案,你可以用相同的TLD加逗号替换任何顶级域加一个字符。

你最终会用".com"替换".com#",用".eu"替换".eu*"等等。替换可以使用Regex进行,所以你的迭代次数将与你想要替换的TLD数量相同。

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

如果你找到了一个缺少逗号的元素,请在该元素中搜索.com、.net或.org,并在该字符后面加一个逗号。

最后,只需使用@符号运行拼接列表

感谢您的回复。

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

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

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

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

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

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

谢谢大家。