UFO ET IT

f #의 문자열 시작 부분에서 패턴 일치

ufoet 2021. 1. 6. 20:02
반응형

f #의 문자열 시작 부분에서 패턴 일치


f #에서 문자열의 시작 부분을 일치 시키려고합니다. 내가 그들을 문자 목록으로 취급해야하는지 또는 무엇으로 취급해야하는지 확실하지 않습니다. 모든 제안을 주시면 감사하겠습니다.

다음은 내가하려는 작업의 가짜 코드 버전입니다.

let text = "The brown fox.."

match text with
| "The"::_ -> true
| "If"::_ -> true
| _ -> false

그래서 저는 문자열의 시작 부분을보고 일치합니다. 참고 나는 문자열 목록에서 일치하지 않고 내가하려는 일의 본질에 대한 아이디어로 위의 내용을 썼습니다.


매개 변수화 된 활성 패턴 을 구출하십시오!

let (|Prefix|_|) (p:string) (s:string) =
    if s.StartsWith(p) then
        Some(s.Substring(p.Length))
    else
        None

match "Hello world" with
| Prefix "The" rest -> printfn "Started with 'The', rest is %s" rest
| Prefix "Hello" rest -> printfn "Started with 'Hello', rest is %s" rest
| _ -> printfn "neither"

패턴에 가드를 사용할 수도 있습니다.

match text with
| txt when txt.StartsWith("The") -> true
| txt when txt.StartsWith("If") -> true
| _ -> false

예, 일치 표현식을 사용하려면 문자 목록으로 처리해야합니다.

다음을 사용하여 문자열을 변환하십시오.

let text = "The brown fox.." |> Seq.toList

그런 다음 일치 표현식을 사용할 수 있지만 각 문자에 대해 문자 (목록의 요소 유형)를 사용해야합니다.

match text with
| 'T'::'h'::'e'::_ -> true
| 'I'::'f'::_ -> true
| _ -> false

Brian이 Parameterized Active Patterns가 훨씬 더 좋을 것이라고 제안했듯이 여기에 유용한 패턴이 있습니다 (페이지 끝으로 이동).

참조 URL : https://stackoverflow.com/questions/3722591/pattern-matching-on-the-beginning-of-a-string-in-f

반응형