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

正则替换[caption]标签为合法HTML:保留属性的C#方案问询

优化C#正则实现带属性的[caption]转HTML 标签

没问题,我帮你搞定这个带属性的caption标签转换问题!原来的正则只能处理无属性的情况,咱们直接优化正则,让它完美支持带任意属性的[caption]标签,还能保留所有属性,方便HtmlAgilityPack解析。

核心思路

我们需要匹配带任意属性的[caption]起始标签,捕获属性内容和标签内的文本,然后替换成标准的HTML <caption>标签,完全保留原有的属性和内容。

正则表达式与C#代码实现

下面是完整的代码示例,包含标签转换和HtmlAgilityPack解析的流程:

using System.Text.RegularExpressions;
using HtmlAgilityPack;

public class CaptionTagConverter
{
    /// <summary>
    /// 将带属性的[caption]标签转换为标准HTML <caption>标签
    /// </summary>
    /// <param name="inputContent">包含[caption]标签的原始内容</param>
    /// <returns>转换后的HTML内容</returns>
    public static string ConvertCustomCaptionToHtml(string inputContent)
    {
        // 正则表达式:匹配带属性的[caption]标签,捕获属性和内容
        // \[caption(.*?)\] 匹配起始标签,捕获所有属性(非贪婪匹配避免跨标签)
        // (.*?) 捕获标签内的内容
        // \[/caption\] 匹配闭合标签
        string captionPattern = @"\[caption(.*?)\](.*?)\[/caption\]";
        
        // 替换为标准HTML标签,$1对应捕获的属性,$2对应捕获的内容
        string convertedContent = Regex.Replace(
            inputContent, 
            captionPattern, 
            "<caption$1>$2</caption>", 
            RegexOptions.Singleline | RegexOptions.IgnoreCase);
        
        return convertedContent;
    }

    /// <summary>
    /// 结合HtmlAgilityPack解析转换后的内容
    /// </summary>
    /// <param name="inputContent">原始内容</param>
    public static void ParseConvertedContent(string inputContent)
    {
        string html = ConvertCustomCaptionToHtml(inputContent);
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(html);

        // 现在可以正常查询所有caption标签及其属性
        var captionNodes = doc.DocumentNode.SelectNodes("//caption");
        if (captionNodes != null)
        {
            foreach (var node in captionNodes)
            {
                Console.WriteLine($"Caption标签属性列表:");
                foreach (var attr in node.Attributes)
                {
                    Console.WriteLine($"- {attr.Name}: {attr.Value}");
                }
                Console.WriteLine($"Caption内容: {node.InnerText.Trim()}");
                Console.WriteLine("---");
            }
        }
    }
}

关键细节说明

  • 非贪婪匹配.*?:避免一次性匹配多个[caption]标签之间的所有内容,确保每个标签独立转换。
  • RegexOptions.Singleline:让正则中的.匹配换行符,支持多行的caption内容。
  • RegexOptions.IgnoreCase:兼容大小写不一致的标签(比如[Caption]或[CAPTION])。

测试示例

如果你的原始内容是:

[caption id="img-cap-001" align="center" class="photo-caption"]这是一张风景照的标题[/caption]

转换后会得到标准的HTML:

<caption id="img-cap-001" align="center" class="photo-caption">这是一张风景照的标题</caption>

此时HtmlAgilityPack可以正常读取id、align、class等所有属性,完全满足解析需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:07:32