由于我对 F# 的正则表达式实现并不完全满意,所以我想要实现一个所谓的“正则表达式链”。它的基本工作方式如下:
给定字符串 s
将被检查是否匹配第一个模式。如果匹配,则应执行与第一个模式关联的函数。如果没有匹配,则应继续进行下一个。
我尝试这样实现:
let RegexMatch ((s : string, c : bool), p : string, f : GroupCollection -> unit) =
if c then
let m = Regex.Match(s, p)
if m.Success then
f m.Groups
(s, false)
else (s, c)
else (s, c)
("my input text", true)
|> RegexMatch("pattern1", fun g -> ...)
|> RegexMatch("pattern2", fun g -> ...)
|> RegexMatch("pattern3", fun g -> ...)
|> .... // more patterns
|> ignore
问题在于,这段代码无效,因为前向管道操作符似乎不能传递元组,或者不喜欢我的实现“设计”。
我的问题是:我能否轻松修复上面的代码,还是应该实现其他类型的正则表达式链?
List.tryPick
运行第一个匹配的正则表达式的函数。这将允许您动态地构建正则表达式函数的情况。 - TheQuickBrownFox