F#匹配多个正则表达式

F#匹配多个正则表达式,f#,F#,我有一个字符串,我知道它将匹配三个正则表达式中的一个(并且只有一个)。我想依次尝试每个正则表达式,直到找到匹配项为止。对于其中两个正则表达式,知道存在匹配就足够了。第三个正则表达式有一个捕获组并返回一个整数。 我有一个regex的活动模式: let (|Regex|_|) pattern input = let m = Regex.Match(input, pattern) if m.Success then Some(List.tail [ for g in m.Groups

我有一个字符串,我知道它将匹配三个正则表达式中的一个(并且只有一个)。我想依次尝试每个正则表达式,直到找到匹配项为止。对于其中两个正则表达式,知道存在匹配就足够了。第三个正则表达式有一个捕获组并返回一个整数。 我有一个regex的活动模式:

let (|Regex|_|) pattern input =
    let m = Regex.Match(input, pattern)
    if m.Success then Some(List.tail [ for g in m.Groups -> g.Value ])
    else None
我对F#还不熟悉,正在努力寻找一种惯用的方法来做到这一点。我真的不想做一个复杂的if-then-else表达式, 任何帮助都将不胜感激


感谢您使用方便的功能,您只需将
与您的3种模式匹配即可:

let regex1 = "^[1234]+$"
let regex2 = "^[abcd]+$"
let regex3 = "^ab([123])$"

let testText v =
    match v with
    | Regex regex1   _   ->         "matched 1!"
    | Regex regex2   _   ->         "matched 2!" 
    | Regex regex3 [ v ] -> sprintf "matched 3 = %d" (int v)
    | _                  ->         "no match"

testText "231" |> print  // matched 1!
testText "abd" |> print  // matched 2!
testText "ab2" |> print  // matched 3 = 2
testText "ab5" |> print  // no match

谢谢现在很明显!