正则表达式 - 在最终出现 @ 之前删除特定字符
Posted
技术标签:
【中文标题】正则表达式 - 在最终出现 @ 之前删除特定字符【英文标题】:Regex - Removing specific characters before the final occurance of @ 【发布时间】:2019-07-30 13:02:52 【问题描述】:所以,我试图在最后出现 @ 之前删除某些字符 [.&@],但在最后一个 @ 之后,应该允许这些字符。
这是我目前所拥有的。
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);
输出:用户名middlesomethingelse@companycom
目前这会删除所有出现的指定字符,除了最后的@。我不知道如何让它工作,请帮忙?
【问题讨论】:
为什么不在“@”字符上拆分? 【参考方案1】:你可以使用
[.&@]+(?=.*@)
或者,等价的[.&@]+(?![^@]*$)
。请参阅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
【讨论】:
【参考方案2】:使用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。
【讨论】:
你的输出是:username@middlesomethingelse@company.com
你的模式应该是[.@&]
以上是关于正则表达式 - 在最终出现 @ 之前删除特定字符的主要内容,如果未能解决你的问题,请参考以下文章