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

Regex 用Haskell从字符串列表中提取文本区域,regex,haskell,Regex,Haskell,我需要从字符串列表(从文件中获得)中提取信息,并将结果作为匹配行列表返回。我制作的功能原型如下: extractRegions :: [String] -> [String] extractRegions list = undefined -- not sure about definition 我知道建议使用Text.Regex.Posix库来执行此操作,但我在Haskell文件上下文中找不到任何有关使用它的信息,而且API库令人困惑。我想提取以某个单词开头,以另一个单词结尾的某些区域

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

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

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

非常感谢

该软件包一开始就非常简单
Text.Regex.Posix可能是您最终求助的武器,但由于它的
(=~)
重载非常普遍,因此它有一个更令人困惑的界面

除此之外,处理此类问题的“Haskell”方法是创建一个类型,该类型表示
extractRegions
(为了参数起见,我们称之为
line
),然后创建一个解析器

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

parseLine :: String -> Maybe Line
使用类似于
Parsec
attoprasec
的库。从那里,我们可以使用
区域
记录访问器功能,非常轻松地从
区域
类型中提取所需的信息

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
该软件包非常容易启动
Text.Regex.Posix可能是您最终求助的武器,但由于它的
(=~)
重载非常普遍,因此它有一个更令人困惑的界面

除此之外,处理此类问题的“Haskell”方法是创建一个类型,该类型表示
extractRegions
(为了参数起见,我们称之为
line
),然后创建一个解析器

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

parseLine :: String -> Maybe Line
使用类似于
Parsec
attoprasec
的库。从那里,我们可以使用
区域
记录访问器功能,非常轻松地从
区域
类型中提取所需的信息

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

例如,请尝试
Parsec
,您所说的“在文件上下文中”是什么意思?字符串列表是字符串列表;它们不会因为来自文件而变得更难或更容易分析。@我的意思是我在Haskell源文件的函数中没有发现任何使用正则表达式的示例-它们使用ghci prelude。@ghci中的user1272525代码看起来与您在
.hs
文件中键入的代码大致相同;有关详细信息,请参阅任何haskell书籍。至于你的实际问题,很难知道你在问什么。你能提供一些组合吗?1)你尝试过的(类型签名代表这里的最低限度思想)2)预期输入和输出的示例3)你对API或你看过的示例特别感到困惑的地方。你看到了吗?这完全是关于正则表达式的。例如,试试看“在文件上下文中”是什么意思?字符串列表是字符串列表;它们不会因为来自文件而变得更难或更容易分析。@我的意思是我在Haskell源文件的函数中没有发现任何使用正则表达式的示例-它们使用ghci prelude。@ghci中的user1272525代码看起来与您在
.hs
文件中键入的代码大致相同;有关详细信息,请参阅任何haskell书籍。至于你的实际问题,很难知道你在问什么。你能提供一些组合吗?1)你尝试过的(类型签名代表这里的最低限度思想)2)预期输入和输出的示例3)你对API或你看过的示例特别感到困惑的地方。你看到了吗?这完全是关于正则表达式的。你的
-type中的
region=region
是真的吗?不,是我的错。我正在定义类型,所以我使用
region::region
来说明记录中该插槽的类型。您的
行中的
region=region
类型是否真的是
region
。我正在定义类型,因此我使用
region::region
来说明记录中该插槽的类型。