如何在C#中将Base64文本分割为多个Base64字符串
Base64文本分割问题解决方法
问题说明
原始Base64文本:
UAAAAAAAAAA=AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=KAAAAAAAAAA=AAAAAAAA8D8AAAAAAAAAQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAAAA==
期望分割后的格式:
UAAAAAAAAAA= AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= KAAAAAAAAAA= AAAAAAAA8D8AAAAAAAAAQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAAAA==
尝试的代码(未达到预期):
string base64Text = "UAAAAAAAAAA=AA....." Regex regex = new Regex(@"^[a-zA-Z0-9+/]*={0,2}$"); string[] base64Strings = regex.Split(base64Text);
错误原因分析
你用的正则^[a-zA-Z0-9+/]*={0,2}$是用来匹配完整的单个Base64字符串的,^和$限定了匹配范围是整个文本的开头到结尾,无法定位到连续Base64片段之间的分割点,所以分割不出想要的结果。
正确解决方案
要分割连续的Base64片段,需要匹配两个片段之间的分界点:也就是在1个或2个=之后,紧接着下一个Base64合法字符的位置。
正则表达式
使用带有前后瞻断言的正则定位分割点:
(?<=={1,2})(?=[a-zA-Z0-9+/])
(?<=={1,2}):后顾断言,确保当前位置前面是1个或2个=(Base64片段的结束标记)(?=[a-zA-Z0-9+/]):前瞻断言,确保当前位置后面是Base64的合法字符(新片段的开始)
完整代码示例
string base64Text = "UAAAAAAAAAA=AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=KAAAAAAAAAA=AAAAAAAA8D8AAAAAAAAAQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAAAA=="; // 定义分割用的正则 Regex splitRegex = new Regex(@"(?<=={1,2})(?=[a-zA-Z0-9+/])"); // 执行分割 string[] splitParts = splitRegex.Split(base64Text); // 用空行连接分割后的片段,得到期望格式 string formattedResult = string.Join(Environment.NewLine + Environment.NewLine, splitParts); // 输出结果 Console.WriteLine(formattedResult);
运行这段代码后,就能得到你需要的分割格式。
内容的提问来源于stack exchange,提问作者artem_tmm
相关产品推荐
相关产品推荐

