我試圖做一個簡單的Haskell程序,將採取看起來像someFilenameHere0035.xml
和返回0035
任何行。我的樣本輸入文件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)
我覺得我真的很接近,但我不知道從這往哪兒走。我究竟做錯了什麼?
如果這是爲了學習Haskell:太棒了!否則,看起來你可能只想在這裏拋出標準的命令行工具。 'grep -o'[0-9] \ + \。xml'| sed's/.xml //'似乎可以工作,如果你不介意它看起來不那麼容易理解,你可以用一個'sed'命令來完成。 –