正则表达式-在@最终出现之前删除特定字符

时间:2019-03-08 13:26:52

标签: c# asp.net regex

因此,我正在尝试删除最后一个@之前的某些字符[。&@],但在该最后一个@之后,应允许使用这些字符。

这是我到目前为止所拥有的。

string pattern = @"\.|\&|\@(?![^@]+$)|[^a-zA-Z@]";
string input = "username@middle&something.else@company.com";

// input, pattern, replacement
string result = Regex.Replace(input, pattern, string.Empty);
Console.WriteLine(result);

输出:usernamemiddlesomethingelse @ companycom

当前,这会删除所有出现的指定字符,最后一个@除外。我不确定如何使它正常工作,请帮忙?

2 个答案:

答案 0 :(得分:2)

您可以使用

[.&@]+(?=.*@)

或等效的[.&@]+(?![^@]*$)。参见regex demo

详细信息

  • [.&@]+-1个或更多.&@个字符
  • (?=.*@)-后面跟着尽可能多的0+个字符(LF除外),然后是@

请参见C# demo

string pattern = @"[.&@]+(?=.*@)";
string input = "username@middle&something.else@company.com";
string result = Regex.Replace(input, pattern, string.Empty);
Console.WriteLine(result);
// => usernamemiddlesomethingelse@company.com

答案 1 :(得分:0)

使用SubstringLastIndexOf的简单解决方案(并代替复杂的正则表达式):

string pattern = @"[.@&]";
string input = "username@middle&something.else@company.com";

string inputBeforeLastAt = input.Substring(0, input.LastIndexOf('@'));

// input, pattern, replacement
string result = Regex.Replace(inputBeforeLastAt, pattern, string.Empty) + input.Substring(input.LastIndexOf('@'));
Console.WriteLine(result);

尝试使用this fiddle