我需要从字符串列表中提取信息(从文件中获取)并将结果作为匹配行列表返回。我制作的函数原型如下:
extractRegions :: [String] -> [String]
extractRegions list = undefined -- not sure about definition
我知道建议使用Text.Regex.Posix
库来执行此操作,但我找不到有关在Haskell文件上下文中使用它的任何信息,并且API库令人困惑。我想提取某些以某个单词开头并以另一个单词结尾的区域,例如从“开始”开始,以“完成”结束,中间的文本也与此正则表达式匹配。
我应该如何在Haskell中解决这个简单的想法?
非常感谢
答案 0 :(得分:1)
regex-compat包非常容易入手。 Text.Regex.Posix
可能是你最终转向的武器,但由于(=~)
非常普遍的重载,它有一个更令人困惑的界面。
除此之外,处理此类问题的“Haskelly”方法是创建一个类型,表示参数的每一行中的信息extractRegions
(为了论证,我们称之为Line
)然后创建一个解析器
data Line = Line { ..., region :: Region, ... }
data Region = Region { ... }
parseLine :: String -> Maybe Line
使用Parsec
或Attoparsec
等库。从那里,我们可以使用Region
记录访问器功能轻松地从region
类型中提取所需的信息。
map record :: [Line] -> [Region]
然后将这些部分组合起来以获得完整的图片
extractRegions :: [String] -> [Region]
extractRegions input = case sequence (map parseLine input) of
Nothing -> error "One of our line parses failed!"
Just lines -> map record lines