0

我想通过使用正则表达式来优化原始文本,给定一个 (patten,replacement) 元组列表。

我尝试在列表元素上使用模式匹配但失败了,错误显示“此表达式应具有类型字符串 * 字符串列表但此处具有类型'a 列表”。

我该如何解决这个问题?非常感谢。

代码如下:

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是由一个字符串和一个字符串列表组成的对,而你想要 a (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 回答