我正在尝试根据正则表达式过滤[[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)
首先,你的正则表达式是错误的.它应该是".*\\.exe".你正在使用的是globbing.
其次,尝试使用=~语法,例如这里的示例.
例如,这应该工作:
filter (\fn -> fn =~ ".*\\.exe" :: Bool) directory_info
Run Code Online (Sandbox Code Playgroud)
此外,您不必使用lambda.把它变成一个功能,它可能会工作.