我想解析一个HTML文档,并将每个段落作为单独的条目打印到日志文件中。到目前为止,我有:
let parseTextFile (path) =
let fileText = File.ReadAllText(path)
fileText.Split('<p>') |> Seq.iter (fun m -> logEmail(m))
但不幸的是对我来说string.Split没有做我想要的事情,似乎存在用单个字符分隔符分割字符串。如何使用多个单个字符分割文件,拥有更多内容而不仅仅是&lt; p&gt;因为我只有一个&lt; / p&gt;在该段末尾。使用正则表达式或某种复杂的匹配器,我可以更具体地选择&lt; p&gt;之间的所有内容。标签
答案 0 :(得分:5)
尝试使用特定的库来解析html,例如HtmlAgilityPack。
答案 1 :(得分:1)
正如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所说 - 使用像HTML Agility Pack这样的库来解析HTML,你会更好,更多更好。他们的解析器非常强大,可以为您节省很多麻烦。