0

(patten,replacement) タプルのリストを指定して、正規表現を使用して生のテキストを絞り込みたいと考えています。

リスト要素でパターン マッチングを使用しようとしましたが失敗しました。「この式は string * string list 型を持つことが期待されていましたが、ここには 'a list 型があります」というエラーが表示されました。

この問題を解決するにはどうすればよいですか? どうもありがとう。

コードは次のとおりです。

let rec refine (raw:string) (rules:string*string list) = 
    match rules with
    | (pattern,replacement) :: rest ->
        refine <| Regex.Replace(raw,pattern,replacement) rest
    | [] -> raw
4

2 に答える 2

5

問題は、astring * string listが文字列と文字列のリストで構成されるペアであるのに対し、(string * string) list:が必要なことです。

let rec refine (raw:string) (rules:(string*string) list) =
    match rules with
    | (pattern,replacement) :: rest ->
        refine (Regex.Replace(raw,pattern,replacement)) rest
    | [] -> raw

または、特定のアノテーションが必要な唯一の理由は、Regex.Replaceがオーバーロードされているためです。これが他のソリューションが機能する理由ですが、機能する注釈を付けることができる他の(より最小限の)場所があります。

let rec refine (raw:string) rules =
    match rules with
    | (pattern,replacement:string) :: rest ->
        refine (Regex.Replace(raw,pattern,replacement)) rest
    | [] -> raw
于 2009-11-29T05:28:15.113 に答える
0

最後に、これを試してみるとうまくいきます:

let rec refine (raw:string) rules = 
    match rules with
    | rule :: rest ->
        //get tuple values beyond the patten matching
        let (pattern:string,replacement:string) = rule 
        refine (Regex.Replace(raw,pattern,replacement)) rest
    | [] -> raw
于 2009-11-29T04:40:35.680 に答える