我应该如何创建匹配列表:
> "aa2gg3tt41u" =~ "\\d+" :: [String]
无论我如何愚弄类型注释,都会产生错误。我希望有类似["2","3","41"]
的内容。
答案 0 :(得分:2)
您想使用instance RegexLike a b => RegexContext a b [[b]]
:
> "aa2gg3tt41u" =~ "[0-9]+" :: [[String]]
[["2"],["3"],["41"]]
我听到你说,“为什么[[String]]
?”嗯,请记住正则表达式支持分组:
> "aa2gg3tt41u" =~ "([a-z]+)[0-9]" :: [[String]]
[["aa2","aa"],["gg3","gg"],["tt4","tt"]]
列表中的第一个元素将始终是完全匹配,然后是子匹配。如果您只对完整匹配感兴趣,请使用map head
或提供您自己的运营商:
(?=~) :: String -> String -> [String]
str ?=~ re = map head (str =~ re)