【问题标题】: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

目前这会删除所有出现的指定字符,除了最后的@。我不知道如何让它工作,请帮忙?

【问题讨论】:

  • 为什么不在“@”字符上拆分?

标签: c# asp.net regex


【解决方案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】:

    使用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

    【讨论】:

    • 你的输出是:username@middlesomethingelse@company.com
    • 你的模式应该是[.@&]
    猜你喜欢
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2021-03-18
    • 2011-07-03
    相关资源
    最近更新 更多