-2

我对 F# 完全陌生。

我正在尝试解析一个 Markdown 文件,其中包含一些逐字代码部分,由 ``` 块分隔。这些块不必是一行中的唯一字符,并且

\``` this is some code ``` and this is not

也是一条有效的线。

如果可能的话,如果解决方案使用纯 Fsharp 做事方式以及可能的功能设计模式(如 Active Patterns),我将不胜感激。

到目前为止,除了阅读文件之外,我还没有走得更远。

open System
open System.IO

let readFile path =
    File.ReadAllText(path)
    // File.ReadAllLines

[<EntryPoint>]
let main argv = 
    readFile "src/main.md"
        |> String.collect (fun ch -> sprintf "%c " ch)
        |> printfn "%s" 
    0

编辑:我不想使用任何库。在 Python 中,这将是一行代码; re.search('start;(.*)end', s)

4

1 回答 1

3

解析 Markdown 的最佳方法是使用专门用于解析 Markdown 的库,例如 FSharp.Formatting。它真的不是你想要重新发明的轮子,特别是如果你是 F# 的新手。使用示例:

open FSharp.Markdown

let markdownText = """
# Some document

Here is a document with a code block

```fsharp
let example = "Foo
```

Here is more text"""

let parsed = Markdown.Parse(markdownText)
printfn "%A" parsed

由于您对 F# 惯用的解决方案感兴趣,请查看FSharp.Formatting 的 Markdown 解析器的源代码:大量的可区分联合、活动模式等。

于 2019-07-20T00:22:43.557 回答