1

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

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

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

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

非常感谢

4

1 回答 1

1

regex-compat包非常容易上手。Text.Regex.Posix可能是您最终转向的武器,但由于其非常普遍的(=~).

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

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

parseLine :: String -> Maybe Line

使用类似Parsecor的库AttoparsecRegion从那里,我们可以通过使用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
于 2013-11-04T23:30:35.593 回答