F#中使用正则表达式进行模式匹配

Pan*_*mal 0 regex f#

如何从任何给定的字符串中查找“发件人:已发送:已接收:”模式。如果给定的模式出现在字符串中,则取出子字符串直到第一个模式,然后忽略其余字符串。是否有实现相同的正则表达式?注意:发件人:已发送:和已接收:之间可能存在文本。

Car*_*Dev 5

使用部分活动模式可能看起来像

open System.Text.RegularExpressions

let (|UpToFromSentReceived|_|) candidate =
    let pattern = Regex("(.*?)From:.*Sent:.*Received:")
    let matches = pattern.Match candidate
    if matches.Success then matches.Groups.[1].Value.Trim() |> Some else None
Run Code Online (Sandbox Code Playgroud)

然后可以使用

let test = function
    | UpToFromSentReceived prefix -> printfn "%s" prefix
    | s -> printfn "No match for '%s'" s

// Arbitrary prefix
test "Arbitrary prefix From: Sent: Received:"

// No match for 'Arbitrary prefix From: Sent: sorry ;-P'
test "Arbitrary prefix From: Sent: sorry ;-P"

// Foo Bar
test "Foo Bar From: arbitrary Sent: interspersed Received: text"

// First Foo Bar
test "First Foo Bar From: arbitrary Sent: interspersed Received: text Second Foo Bar From: arbitrary Sent: interspersed Received: text"
Run Code Online (Sandbox Code Playgroud)

根据您的要求,您可能要省略 .Trim()