我正在尝试编写一个将两个其他模式组合起来的模式,但我不确定该如何去做。 我的输入是一个字符串列表(一个文档);我有一个匹配文档头的模式和一个匹配文档正文的模式。 这个模式应该匹配整个文档并返回头部模式和正文模式的结果。
我正在尝试编写一个将两个其他模式组合起来的模式,但我不确定该如何去做。 我的输入是一个字符串列表(一个文档);我有一个匹配文档头的模式和一个匹配文档正文的模式。 这个模式应该匹配整个文档并返回头部模式和正文模式的结果。
您可以使用&
同时运行两个模式。您在问题中遗漏了一些细节,因此这里有一些代码,我假设它与您所做的工作有些相似。
let (|Header|_|) (input:string) =
if input.Length > 0 then
Some <| Header (input.[0])
else
None
let (|Body|_|) (input:string) =
if input.Length > 0 then
Some <| Body (input.[1..])
else
None
第一个模式将获取字符串的第一个字符,而第二个模式将返回除第一个字符之外的所有内容。以下代码演示了如何将它们结合使用。
match "Hello!" with
| Header h & Body b -> printfn "FOUND: %A and %A" h b
| _ -> ()
这会打印出: FOUND: 'H' and "ello!"