Haskell,Regex:将字符串缩减为匹配列表

时间:2016-02-18 18:52:39

标签: regex haskell

我应该如何创建匹配列表:

> "aa2gg3tt41u" =~ "\\d+" :: [String]
无论我如何愚弄类型注释,

都会产生错误。我希望有类似["2","3","41"]的内容。

1 个答案:

答案 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)