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
来说明记录中该插槽的类型。