我有一个有效以Base 64编码的字符串-someBase64String
,其中已经添加了无效后缀(例如_002_CWLP265MB136330847F70EDE0813A5AC4C3A80CWLP265MB1363GBRP_--
)。
我想将字符串拆分回有效以Base 64编码的前缀和无效后缀。
这匹配基本为64的编码字符串
Regex rg = new Regex("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$");
rg.Match(someBase64String)
如果是有效的基数64字符串,将返回true
在添加到someBase64String
时,此字符串-_002_CWLP265MB136330847F70EDE0813A5AC4C3A80CWLP265MB1363GBRP_--
被添加到base64encoded string
的末尾,从而导致整个字符串的转换。
base64字符串失败。 rg.Match(someBase64String)
也将返回false。
在base64字符串无效的情况下(如上所述),我需要提取导致转换失败的字符串的部分/字符;即_002_CWLP265MB136330847F70EDE0813A5AC4C3A80CWLP265MB1363GBRP_--
。
答案 0 :(得分:1)
为什么不借助 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