如何从任何给定的字符串中查找“发件人:已发送:已接收:”模式。如果给定的模式出现在字符串中,则取出子字符串直到第一个模式,然后忽略其余字符串。是否有实现相同的正则表达式?注意:发件人:已发送:和已接收:之间可能存在文本。
使用部分活动模式可能看起来像
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()