문제

(Patten, Replacement) 튜플 목록이 주어지면 정규 표현식을 사용하여 원시 텍스트를 개선하고 싶습니다.

목록 요소에서 Patten 매칭을 사용하려고 시도했지만 실패했습니다. 오류는 "이 표현식에는 String * 문자열 목록이있을 것으로 예상되었지만 여기에는 '목록을 입력 할 수 있습니다.

이 문제를 해결하려면 어떻게해야합니까? 정말 감사합니다.

코드는 다음과 같습니다.

let rec refine (raw:string) (rules:string*string list) = 
    match rules with
    | (pattern,replacement) :: rest ->
        refine <| Regex.Replace(raw,pattern,replacement) rest
    | [] -> raw
도움이 되었습니까?

해결책

문제는 a string * 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

다른 팁

마지막으로 시도 할 때 작동합니다.

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top