循环遍历字符串数组以匹配模式

Loop through a string array to match a pattern

我有一个日志文件,我正在尝试使用 Regex 进行解析。

我从日志文件中创建了一个行数组,如下所示:

let loadLog =
    File.ReadAllLines "c:/access.log"
        |> Seq.filter (fun l -> not (l.StartsWith("#")))
        |> Seq.map (fun s -> s.Split()) 
        |> Seq.map (fun l -> l.[7],1)
        |> Seq.toArray

然后我需要遍历这个数组。但我认为这行不通,因为 line 需要是一个字符串。

在 f# 中有没有特殊的方法来处理这样的事情?

type ActorDetails =
    {
        Date: DateTime
        Name: string
        Email: string
    }

for line in loadLog do
    let line queryString  =
        match queryString  with
        | Regex @"[\?|&]system=([^&]+)" [json] ->
             let jsonValue = JValue.Parse(Uri.UnescapeDataString(json))
             {
                  Date = DateTime.UtcNow (* replace with parsed date *)
                  Name = jsonValue.Value<JArray>("name").[0].Value<string>()
                  Email = jsonValue.Value<JArray>("mbox").[0].Value<string>().[7..]
             }

使用部分活动模式 (|Regex|_|) 来做到这一点

open System.Text.RegularExpressions

let (|Regex|_|) regexPattern input =
    let regex = new Regex(regexPattern)
    let regexMatch = regex.Match(input)
    if regexMatch.Success 
    then Some regexMatch.Value
    else None

let queryString input = function
    | Regex  @"[\?|&]system=([^&]+)" s -> s
    | _ -> sprintf "other: %s" input