You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#正则表达式提取标签间文本并替换为Base64编码?

C# 正则替换Base64标签内容需求

我需要在C#里实现这么个功能:

  • 用正则表达式找出文本里夹在[base64]和[/base64]之间的内容
  • 把找到的内容做Base64编码
  • 用编码后的结果替换掉原来的标签和里面的内容

举个例子:

输入文本:"[base64] Hi my name [/base64] is Andrew, how are you"
期望输出:"SGkgbXkgbmFtZQ== is Andrew, how are you"

我尝试写的代码

Regex yourRegex = new Regex("(?<=\\[base64])(.*?)(?=\\[\\/base64])");
string result = yourRegex.Replace(Uri.UnescapeDataString(Body)),Helpers.Base64Encode(Convert.ToString(yourRegex)));
letterData.body = result;

问题修正与正确代码

你写的代码有几个问题:

  1. Replace方法的参数括号配对错误,而且第二个参数不能直接传正则对象的字符串形式
  2. 要对每个匹配到的内容单独编码,得用MatchEvaluator委托来处理,不能直接传固定值

正确的代码如下:

// 正则匹配包含标签的整个区块,方便直接替换
Regex base64Regex = new Regex(@"\[base64\](.*?)\[/base64\]", RegexOptions.Singleline);
string unescapedBody = Uri.UnescapeDataString(Body);
// 用MatchEvaluator处理每个匹配项
string result = base64Regex.Replace(unescapedBody, match => 
{
    // 取出标签之间的内容
    string content = match.Groups[1].Value;
    // 调用你的Base64编码方法
    return Helpers.Base64Encode(content);
});
letterData.body = result;

要点说明

  • 正则改成匹配整个[base64]...[/base64]块,这样替换的时候直接把标签和内容一起换成编码后的字符串,不会残留标签
  • 加上RegexOptions.Singleline参数,确保标签内有换行时也能正确匹配
  • 通过match.Groups[1].Value拿到标签里的原始内容,传给编码方法
  • 用MatchEvaluator委托实现动态替换,每个匹配的内容都会被单独编码

内容的提问来源于stack exchange,提问作者Oleg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:20:41