我正在尝试根据正则表达式过滤[[String]]。
filter (\fn -> case (matchRegex (mkRegex "*.exe") fn) of Nothing -> False
Just _ -> True)
directory_info
不幸的是,lambda函数在语法上是无效的:根据ghc,模式匹配不能出现在表达式上下文中。
如何简单地改写以实现预期的含义?
答案 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
。