Regex Соответствует строке base64 и удаляет несоответствующий текст / charcters - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть действительная строка в кодировке Base 64 - someBase64String, к которой был добавлен неверный суффикс (например, _002_CWLP265MB136330847F70EDE0813A5AC4C3A80CWLP265MB1363GBRP_--).

Я хочу split строка обратно действительный префикс в кодировке Base 64 и неверный суффикс.

Соответствует строке в кодировке Base 64

Regex rg = new Regex("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"); 

rg.Match(someBase64String) вернет true, если это допустимая строка base 64

При добавлении к someBase64String эта строка - _002_CWLP265MB136330847F70EDE0813A5AC4C3A80CWLP265MB1363GBRP_-- добавляется в конце base64encoded string, которыйприводит к сбою преобразования всей строки base64.rg.Match(someBase64String) также вернет false.

В случае недопустимой строки base64 (как описано выше) мне нужно извлечь часть / символы строки, которая приводит к сбою преобразования;а именно _002_CWLP265MB136330847F70EDE0813A5AC4C3A80CWLP265MB1363GBRP_-- в данном случае.

1 Ответ

0 голосов
/ 06 декабря 2018

Почему бы не отфильтровать символы с помощью Linq ?Если вы хотите принять от 64 символов до недопустимого суффикса, используйте Take вместо Skip

 string wrongSince = string.Concat(source
   .SkipWhile(c => c >= 'A' && c <= 'Z' ||
                   c >= 'a' && c <= 'z' ||
                   c >= '0' && c <= '9' ||
                   c == '+' ||
                   c == '/'));

Тест:

string valid = "ABC+DEF+123";
string suffix = "_002_CWLP265MB136330847F70EDE0813A5AC4C3A80CWLP265MB1363GBRP_--";

string source = valid + suffix;

string wrongSince = string.Concat(source
   .SkipWhile(c => c >= 'A' && c <= 'Z' ||
                   c >= 'a' && c <= 'z' ||
                   c >= '0' && c <= '9' ||
                   c == '+' ||
                   c == '/'));

 string correctPrefix = string.Concat(source
   .TakeWhile(c => c >= 'A' && c <= 'Z' ||
                   c >= 'a' && c <= 'z' ||
                   c >= '0' && c <= '9' ||
                   c == '+' ||
                   c == '/'));

Console.WriteLine(wrongSince);
Console.WriteLine(correctPrefix); 

Результат:

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