因此,我正在尝试删除最后一个@之前的某些字符[。&@],但在该最后一个@之后,应允许使用这些字符。
这是我到目前为止所拥有的。
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
当前,这会删除所有出现的指定字符,最后一个@除外。我不确定如何使它正常工作,请帮忙?
答案 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)
使用Substring
和LastIndexOf
的简单解决方案(并代替复杂的正则表达式):
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。