使用正则表达式和模式匹配过滤[[String]]

时间:2013-05-17 19:06:42

标签: haskell

我正在尝试根据正则表达式过滤[[String]]。

filter (\fn -> case (matchRegex (mkRegex "*.exe") fn) of Nothing -> False
                                                         Just _ -> True) 
       directory_info

不幸的是,lambda函数在语法上是无效的:根据ghc,模式匹配不能出现在表达式上下文中。

如何简单地改写以实现预期的含义?

3 个答案:

答案 0 :(得分:12)

为什么在System.FilePath时使用正则表达式?在这种情况下,请尝试takeExtension功能。

filter (\fn -> takeExtension fn == ".exe") directory_info

答案 1 :(得分:6)

首先,你的正则表达式是错误的。它应该是".*\\.exe"。你正在使用的是globbing。

其次,请尝试使用=~语法,例如here

例如,这应该有效:

filter (\fn -> fn =~ ".*\\.exe" :: Bool) directory_info

另外,你不必使用lambda。把它变成一个功能,它可能会起作用。

答案 2 :(得分:4)

如果您只对匹配感兴趣,可以使用matchTest代替matchRegex