【问题标题】:regex to parse certain html tags [duplicate]正则表达式解析某些html标签[重复]
【发布时间】:2020-02-23 18:59:03
【问题描述】:

我有一个字符串,其中的一部分包含在 html 标记中,主要是 spanstrong。我想把它分成几部分,得到每个部分的文本、标签名和类属性

Take <span class="victoria line-text">Victoria line</span> to <strong>Highbury & Islington</strong>

所以对于上面的文字,我想提取 4 个部分。

        var result = new MyObj[]
        {
            new MyObj{ Text="Take "},
            new MyObj{ Text="Victoria line", Tag="span", ClassAttribute="victoria line-text" },
            new MyObj{ Text=" to "},
            new MyObj{ Text="Highbury & Islington", Tag="strong"},
        };

这不是一个有效的 XML/HTML(只是一个文本,它的某些部分包含在标签中)所以我决定使用一些简单的正则表达式来解析我需要的值。 我设法使用此代码获取跨度信息

        var str = "Take <span class=\"victoria line-text\">Victoria line</span> to <strong>Highbury & Islington</strong>";
        Regex regex = new Regex("<span class=\"(.*?)\">(.*?)</span>");
        if(regex.IsMatch(str))
        {
            MatchCollection collection = regex.Matches(str);
            foreach(Match m in collection)
            {
                string text = m.Groups[2].Value;  //Victoria line
                string classes = m.Groups[1].Value; //victoria line-text
                Console.WriteLine(text + "   " + classes);
            }
        }

是否可以通过正则表达式获取所有部分的信息?

输入将包含纯文本,其中可能包含无效的未转义 html 字符(即 &、'"),只是其中的一部分包裹在 span 或 strong 标签中。XmlDocument 或其他库会抛出异常,因为它不是正确的 html。

【问题讨论】:

  • 如果是 html 输入,为什么不使用 html 解析器?
  • 我说它不包含在中,文本可以包含&
  • 请阅读这个答案 - stackoverflow.com/a/1732454/33

标签: c# .net regex


【解决方案1】:

使用 Regex 解析 html 总是很棘手,所以我不建议在这里使用 Regex。我宁愿推荐的是使用已经做得很好的现有库。看看 AngleSharpHtmlAgilityPack - 两者都可以作为 nugets 使用。

注意:不用担心它没有被包裹——你可以自己做,只需尝试解析&lt;p&gt;{yourString}&lt;/p&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2019-01-18
    • 2013-07-23
    • 2018-10-03
    • 1970-01-01
    • 2018-04-29
    • 2016-06-15
    相关资源
    最近更新 更多