Regex - удаление определенных символов перед окончательным вхождением @ - PullRequest
1 голос
/ 08 марта 2019

Итак, я пытаюсь удалить некоторые символы [. & @] До последнего вхождения @, но после этого последнего @ эти символы должны быть разрешены.

Это то, что у меня такfar.

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 ]

2 голосов
/ 08 марта 2019

Вы можете использовать

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

или эквивалент [.&@]+(?![^@]*$).См. regex demo .

Подробности

  • [.&@]+ - 1 или более ., & или @ chars
  • (?=.*@) - с последующим добавлением любых 0+ символов (кроме LF), а затем @.

См. демонстрационную версию C #:

string pattern = @"[.&@]+(?=.*@)";
string input = "username@middle&something.else@company.com";
string result = Regex.Replace(input, pattern, string.Empty);
Console.WriteLine(result);
// => usernamemiddlesomethingelse@company.com
0 голосов
/ 08 марта 2019

Просто простое решение (и альтернатива сложному регулярному выражению) с использованием 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);

Попробуйте с этой скрипкой .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...