【问题标题】:Need regular expression to find all phrases in html [duplicate]需要正则表达式来查找 html 中的所有短语 [重复]
【发布时间】:2016-02-11 11:04:01
【问题描述】:

我解析 html(在 c# 代码中作为字符串)并且需要从 html 中获取所有短语。例如html:

<div><div>text1</div>text2</div>

我想获取字符串数组:

文本1
文本2

如果正则表达式不可能,请提供算法如何跳过所有标签名称,标签属性,只获取文本内容。

更新:这不是跨度问题的重复,因为文本可以在任何标签中,而不仅仅是跨度。我需要所有文本,除了标签和属性。不想使用 HtmlAgility 解析器。

Update2:找到正则表达式(是的,有可能)

    //parse html, save text node in list
    public void FindTextHtml(string html, List<string> list)
    {
        var ms = Regex.Matches(html, @">([^<>]*)<", RegexOptions.IgnoreCase | RegexOptions.Multiline);
        foreach (Match m in ms)
        {
            var text = m.Groups[1].Value;
            list.Add(text);
        }
    }

提供完整源代码here

【问题讨论】:

  • 听起来像XY problem?
  • 您正试图用螺丝刀敲入钉子。如果需要解析 HTML,请使用 HTML 解析器。
  • 我认为这是一个非常简单的问题,大多数开发人员都知道如何解决。我可以自己解决它,但想节省我的时间。感谢理解。
  • 见下面的答案:不需要解析器。只是正则表达式。
  • 您可以使用原始问题中的解决方案并获取数组,只需使用\r\n 拆分并修剪所有数组元素。您不应为此任务使用正则表达式。

标签: c# regex


【解决方案1】:

你要找的东西在这里:Grabbing HTML Tags

您要查找的匹配项位于 ...(.*?)... 组中。希望这会有所帮助

【讨论】:

    【解决方案2】:

    使用HtmlAgilityPack dll 解析 XML 和 HTML 文件,然后使用下面的代码获取您的文本:

            string path = @"path to the file";
            HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument();
            hd.Load(path);
            string result= hd.DocumentNode.InnerText.Trim(); 
    

    这就是你所需要的一切

    【讨论】:

    • 好方法,如果找不到正则表达式我就用它。不想在我的项目中添加其他库。
    • 检查我在原始问题中的回答。也许,return HtmlAgilityPack.HtmlEntity.DeEntitize(doc.DocumentNode.InnerText.Trim()); 更适合当前场景。
    • 不想使用 HtmlAgilityPack。仅在 .NET 库中构建。
    • @WiktorStribiżew 你的代码给出的输出与地雷完全相同(上面的代码)
    • @ako:只有给定的输入。
    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多