循环遍历字符串数组以匹配模式
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
我有一个日志文件,我正在尝试使用 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