F#の正規表現の実装に満足していないので、正規表現のチェーンを実装したいと考えていました。F#Regexのマッチングチェーン
与えられた文字列s
が最初のパターンと一致するかどうかがチェックされます。そうであれば、それは第1のパターンに関連する機能を実行すべきである。そうでない場合は、次のものを続ける必要があります。
次のように私はそれを実装しようとした:
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
を問題は、このコードは、「デザイン」、前方パイプオペレータはパイプのタプルには思われないよう、無効であるか、私の実装を好きではないということであり、 。
私の質問は:私はこのコードを簡単に修正することができますか、むしろ他の種類の正規表現チェーンを実装する必要がありますか?
「*として、私はF#の正規表現の実装にはまったく満足していません。 "F#は正規表現の実装がありません。 .NETは、.NET Coreは、Monoは行いますが、F#は正規表現が何であるかを意識していません。 – ildjarn
もう1つのアプローチは、データ指向にすることです:正規表現の関数の組をリストに入れ、 'List.tryPick'を使って最初に一致する正規表現の関数を実行します。これにより正規表現関数の場合を動的に構築できます。 – TheQuickBrownFox