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

Pau*_*han 2 haskell

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

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

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

应该如何改写以简明扼要地执行预期的含义?

ham*_*mar 12

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

filter (\fn -> takeExtension fn == ".exe") directory_info
Run Code Online (Sandbox Code Playgroud)


Joe*_*and 6

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

其次,尝试使用=~语法,例如这里的示例.

例如,这应该工作:

filter (\fn -> fn =~ ".*\\.exe" :: Bool) directory_info
Run Code Online (Sandbox Code Playgroud)

此外,您不必使用lambda.把它变成一个功能,它可能会工作.