我有一个字符串,我知道它将与三个正则表达式中的一个(只有一个)匹配。我想依次尝试每个正则表达式,直到找到匹配项。对于其中两个正则表达式,知道存在匹配项就足够了。第三个正则表达式具有捕获组并返回整数。 我有一个有效的正则表达式模式:
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表达式, 任何帮助将不胜感激。
谢谢
答案 0 :(得分:5)
使用方便的功能,您需要做的就是将match
与以下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