【问题标题】: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
【解决方案2】:
正如 wmeyer 所说,您需要在字符串上使用 .Split() 方法的不同重载。事实上,您发布的代码甚至无法编译,因为 '<p>' 不是字符串文字 - 您需要使用 "<p>" 代替(单引号用于字符文字)。
下面是如何使用.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。他们的解析器非常健壮,可以为您省去很多麻烦。