C# 正则表达式以删除特殊字符,同时保留有效的电子邮件格式

C# 正则表达式以删除特殊字符,同时保留有效的电子邮件格式,c#,regex,regex-negation,C#,Regex,Regex Negation,我在C#中使用这个。我从一个类似电子邮件的字符串开始,格式如下: employee[any characters]@company[any characters].com 我想从[任何字符]片段中去掉非字母数字 例如,我想要这个“employee1@2r&a*d.m32@@company98';99..com“ 成为这个“employee12radm32@company9899.com“ 这句话只不过是把所有的特价商品都拿走了,但我想在公司前留下一个@和一个。在com之前。所以我需要这个表达式

我在C#中使用这个。我从一个类似电子邮件的字符串开始,格式如下:

employee[any characters]@company[any characters].com
我想从[任何字符]片段中去掉非字母数字

例如,我想要这个
“employee1@2r&a*d.m32@@company98';99..com“

成为这个
“employee12radm32@company9899.com“

这句话只不过是把所有的特价商品都拿走了,但我想在公司前留下一个@和一个。在com之前。所以我需要这个表达式来忽略或掩盖员工、@company和.com片段。。。只是不知道怎么做

var regex = new Regex("[^0-9a-zA-Z]"); //whitelist the acceptables, remove all else.

您可以简化正则表达式并用

tmp = Regex.Replace(n, @"\W+", "");
其中
\w
表示所有字母、数字和下划线,
\w
\w
的否定版本。
一般来说,最好创建一个允许字符的白名单,而不是试图预测所有不允许的符号。

您可以简化正则表达式并用

tmp = Regex.Replace(n, @"\W+", "");
其中
\w
表示所有字母、数字和下划线,
\w
\w
的否定版本。
一般来说,最好创建一个允许字符的白名单,而不是试图预测所有不允许的符号。

您可以简化正则表达式并用

tmp = Regex.Replace(n, @"\W+", "");
其中
\w
表示所有字母、数字和下划线,
\w
\w
的否定版本。
一般来说,最好创建一个允许字符的白名单,而不是试图预测所有不允许的符号。

您可以简化正则表达式并用

tmp = Regex.Replace(n, @"\W+", "");
其中
\w
表示所有字母、数字和下划线,
\w
\w
的否定版本。
一般来说,最好创建一个允许字符的白名单,而不是试图预测所有不允许的符号。

我可能会这样写:

(忽略区分大小写,如果需要区分大小写,请评论)

结果

employee12radm32@company989.com


我可能会这样写:

(忽略区分大小写,如果需要区分大小写,请评论)

结果

employee12radm32@company989.com


我可能会这样写:

(忽略区分大小写,如果需要区分大小写,请评论)

结果

employee12radm32@company989.com


我可能会这样写:

(忽略区分大小写,如果需要区分大小写,请评论)

结果

employee12radm32@company989.com


@dognose给出了一个很好的正则表达式解决方案。我将把我的答案保留在这里作为参考,但我会选择他的答案,因为它要短得多/干净得多

var companyName = "company";
var extension = "com";
var email = "employee1@2 r&a*d.m32@@company98 ';99..com";

var tempEmail = Regex.Replace(email, @"\W+", "");

var companyIndex = tempEmail.IndexOf(companyName);
var extIndex = tempEmail.LastIndexOf(extension);

var fullEmployeeName = tempEmail.Substring(0, companyIndex);
var fullCompanyName = tempEmail.Substring(companyIndex, extIndex - companyIndex);

var validEmail = fullEmployeeName + "@" + fullCompanyName + "." + extension;

@dognose给出了一个很好的正则表达式解决方案。我将把我的答案保留在这里作为参考,但我会选择他的答案,因为它要短得多/干净得多

var companyName = "company";
var extension = "com";
var email = "employee1@2 r&a*d.m32@@company98 ';99..com";

var tempEmail = Regex.Replace(email, @"\W+", "");

var companyIndex = tempEmail.IndexOf(companyName);
var extIndex = tempEmail.LastIndexOf(extension);

var fullEmployeeName = tempEmail.Substring(0, companyIndex);
var fullCompanyName = tempEmail.Substring(companyIndex, extIndex - companyIndex);

var validEmail = fullEmployeeName + "@" + fullCompanyName + "." + extension;

@dognose给出了一个很好的正则表达式解决方案。我将把我的答案保留在这里作为参考,但我会选择他的答案,因为它要短得多/干净得多

var companyName = "company";
var extension = "com";
var email = "employee1@2 r&a*d.m32@@company98 ';99..com";

var tempEmail = Regex.Replace(email, @"\W+", "");

var companyIndex = tempEmail.IndexOf(companyName);
var extIndex = tempEmail.LastIndexOf(extension);

var fullEmployeeName = tempEmail.Substring(0, companyIndex);
var fullCompanyName = tempEmail.Substring(companyIndex, extIndex - companyIndex);

var validEmail = fullEmployeeName + "@" + fullCompanyName + "." + extension;

@dognose给出了一个很好的正则表达式解决方案。我将把我的答案保留在这里作为参考,但我会选择他的答案,因为它要短得多/干净得多

var companyName = "company";
var extension = "com";
var email = "employee1@2 r&a*d.m32@@company98 ';99..com";

var tempEmail = Regex.Replace(email, @"\W+", "");

var companyIndex = tempEmail.IndexOf(companyName);
var extIndex = tempEmail.LastIndexOf(extension);

var fullEmployeeName = tempEmail.Substring(0, companyIndex);
var fullCompanyName = tempEmail.Substring(companyIndex, extIndex - companyIndex);

var validEmail = fullEmployeeName + "@" + fullCompanyName + "." + extension;

您可以使用以下正则表达式:

(?:\W)(?!company|com)
它将替换任何特殊字符,除非后面紧跟着
company
(因此
@company
将保留)或
com
(因此
.com
将保留):

将成为

employee12radm32@company9899.com
见:

请注意,您需要使用
g
修饰符来替换所有出现的此类不需要的字符。 这是C#中的默认值,因此您只需使用一个简单的
Regex.Replace()


更新:

ofc。正则表达式
(?:\W)(?!com)
就足够了,但它仍然会保留像
#com
~companion
这样的部分,因为它们也匹配。因此,这仍然不能保证输入——或者说转换——是100%有效的。您应该考虑简单地抛出验证错误,而不是尝试对输入进行消毒以满足您的需要。p>
即使您也能设法处理这种情况-如果
@company
.com
出现两次,该怎么办?

您可以使用以下正则表达式:

(?:\W)(?!company|com)
它将替换任何特殊字符,除非后面紧跟着
company
(因此
@company
将保留)或
com
(因此
.com
将保留):

将成为

employee12radm32@company9899.com
见:

请注意,您需要使用
g
修饰符来替换所有出现的此类不需要的字符。 这是C#中的默认值,因此您只需使用一个简单的
Regex.Replace()


更新:

ofc。正则表达式
(?:\W)(?!com)
就足够了,但它仍然会保留像
#com
~companion
这样的部分,因为它们也匹配。因此,这仍然不能保证输入——或者说转换——是100%有效的。您应该考虑简单地抛出验证错误,而不是尝试对输入进行消毒以满足您的需要。p>
即使您也能设法处理这种情况-如果
@company
.com
出现两次,该怎么办?

您可以使用以下正则表达式:

(?:\W)(?!company|com)
它将替换任何特殊字符,除非后面紧跟着
company
(因此
@company
将保留)或
com
(因此
.com
将保留):

将成为

employee12radm32@company9899.com
见:

请注意,您需要使用
g
修饰符来替换所有出现的此类不需要的字符。 这是C#中的默认值,因此您只需使用一个简单的
Regex.Replace()


更新:

ofc。正则表达式
(?:\W)(?!com)
就足够了,但它仍然会保留像
#com
~companion
这样的部分,因为它们也匹配。因此,这仍然不能保证输入——或者说转换——是100%有效的。您应该考虑简单地进行验证。