【问题标题】:f# split html by tagsf# 按标签拆分 html
【发布时间】:2013-02-24 12:44:13
【问题描述】:

我想解析一个 HTML 文档并将每个段落作为单独的条目打印到日志文件中。到目前为止,我有:

let parseTextFile (path) =
        let fileText = File.ReadAllText(path)
        fileText.Split('<p>') |> Seq.iter (fun m -> logEmail(m))

但不幸的是,对我来说 string.Split 并没有做我想要的,似乎存在用单个字符分隔符分割字符串。我如何使用不只是一个字符的东西来拆分文件,除了

之外还有其他东西可能会很好,因为我将在段落末尾有一个

。使用正则表达式或某种复杂的匹配器,我可以更具体地挑选出

标记之间的所有内容。

【问题讨论】:

标签: html string parsing f# split


【解决方案1】:

尝试使用特定的库来解析 html,例如 HtmlAgilityPack

【讨论】:

    【解决方案2】:

    正如 wmeyer 所说,您需要在字符串上使用 .Split() 方法的不同重载。事实上,您发布的代码甚至无法编译,因为 '&lt;p&gt;' 不是字符串文字 - 您需要使用 "&lt;p&gt;" 代替(单引号用于字符文字)。

    下面是如何使用.Split()的正确重载:

    open System.IO
    
    let parseTextFile path =
        let fileText = File.ReadAllText path
        fileText.Split ([| "<p>"; |], System.StringSplitOptions.RemoveEmptyEntries)
        |> Seq.iter logEmail
    

    在 F# Interactive 中进行快速测试:

    > "First paragraph<p>Second paragraph.<p><p>Third paragraph.<p>"
       .Split ([| "<p>"; |], System.StringSplitOptions.RemoveEmptyEntries);;
    val it : string [] =
      [|"First paragraph"; "Second paragraph."; "Third paragraph."|]
    

    最后,正如@ntr 所说的那样——你非常,much最好使用像 HTML Agility Pack 这样的库来解析 HTML。他们的解析器非常健壮,可以为您省去很多麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2021-06-04
      • 1970-01-01
      相关资源
      最近更新 更多