2

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

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

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

这应该如何改写以简洁地执行预期的含义?

4

3 回答 3

12

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

filter (\fn -> takeExtension fn == ".exe") directory_info
于 2013-05-17T19:20:15.683 回答
6

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

其次,尝试改用语法,这里=~的例子。

例如,这应该有效:

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

此外,您不必使用 lambda。把它变成一个函数,它可能会起作用。

于 2013-05-17T19:19:57.783 回答
4

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

于 2013-05-17T19:16:14.100 回答