私はsomeFilenameHere0035.xml
のような行を取り、0035
を返す単純なHaskellプログラムを作ろうとしています。私のサンプル入力ファイル、INPUT.TXTは、次のようになります。どのように私はこの正規表現をHaskellで使うことができますか?
someFilenameHere0035.xml
anotherFilenameHere4465.xml
と実行:cat input.txt | runhaskell getID.hs
は返す必要があります:
0035
4465
私はそんなに難しいこれを考え出すを抱えています。
import Text.Regex.PCRE
getID :: String -> [String]
getID str = str =~ "([0-9]+)\\.xml" :: [String]
main :: IO()
main = interact $ unlines . getID
しかし、私は、私は全く理解していないエラーメッセージが表示されます:ここで私がこれまで持っているものだ
• No instance for (RegexContext Regex String [String])
arising from a use of ‘=~’
• In the expression: str =~ "([0-9]+)\\.xml" :: [String]
In an equation for ‘getID’:
getID str = str =~ "([0-9]+)\\.xml" :: [String] (haskell-stack-ghc)
私は本当に近くだように私は感じるが、私は知りませんどこから行くか私は間違って何をしていますか?
これはハスケルを学習するためのものです。さもなければ、これで標準のコマンドラインツールを投げたいかもしれないようです。 'grep -o '[0-9] \ + \。xml' | sedの/ .xml // ''はうまくいくと思われます。少し分かりにくいのを気にしなければ、おそらく単一の 'sed'コマンドで実行できます。 –