使用Haskell从字符串列表中提取文本区域

时间:2013-11-04 21:49:47

标签: regex haskell

我需要从字符串列表中提取信息(从文件中获取)并将结果作为匹配行列表返回。我制作的函数原型如下:

extractRegions :: [String] -> [String]
extractRegions list = undefined -- not sure about definition

我知道建议使用Text.Regex.Posix库来执行此操作,但我找不到有关在Haskell文件上下文中使用它的任何信息,并且API库令人困惑。我想提取某些以某个单词开头并以另一个单词结尾的区域,例如从“开始”开始,以“完成”结束,中间的文本也与此正则表达式匹配。

我应该如何在Haskell中解决这个简单的想法?

非常感谢

1 个答案:

答案 0 :(得分:1)

regex-compat包非常容易入手。 Text.Regex.Posix可能是你最终转向的武器,但由于(=~)非常普遍的重载,它有一个更令人困惑的界面。

除此之外,处理此类问题的“Haskelly”方法是创建一个类型,表示参数的每一行中的信息extractRegions(为了论证,我们称之为Line )然后创建一个解析器

data Line   = Line   { ..., region :: Region, ... }
data Region = Region { ... }

parseLine :: String -> Maybe Line

使用ParsecAttoparsec等库。从那里,我们可以使用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