F #의 사용법에 대한 정규식 구현에 만족하지 않으므로 정규식 체인을 구현하고 싶습니다. 기본적으로 다음과 같이 작동합니다 :F # Regex matching chain
주어진 문자열이 첫 번째 패턴과 일치하는지 여부를 확인합니다. s
. 그럴 경우 첫 번째 패턴과 관련된 기능을 실행해야합니다. 그렇지 않으면 다음 단계로 계속 진행해야합니다.
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
또 다른 접근 방법은 데이터 지향적 인 방법입니다 : 정규 표현식 - 함수 쌍을리스트에 넣고'List.tryPick'을 사용하여 첫 번째로 일치하는 정규 표현식에 대한 함수를 실행합니다. 이것은 regex-function case를 동적으로 구축 할 수 있도록 해줍니다. – TheQuickBrownFox