1

(ファイルから取得した) 文字列のリストから情報を抽出し、一致した行のリストとして結果を返す必要があります。私が作成した関数プロトタイプは次のとおりです。

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

これを行うためにライブラリが推奨されていることは理解してText.Regex.Posixいますが、Haskell ファイル コンテキスト内でライブラリを使用する方法に関する情報が見つかりません。また、API ライブラリがわかりにくいです。ある単語で始まり別の単語で終わる特定の領域を抽出したいと思います。たとえば、「開始」で始まり「終了」で終わり、その間のテキストもこの正規表現と一致します。

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

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
于 2013-11-04T23:30:35.593 に答える