我想用haskell替换部分字符串。例如,我有一个字符串"LP FACTOR PLUS FACTOR RP MULT FACTOR"
,我想用"FACTOR PLUS FACTOR"
替换"TERM"
,所以我的新字符串将是"LP TERM RP MULT FACTOR"
任何帮助将不胜感激。
答案 0 :(得分:3)
有时你只是无法击败旧的正则表达式替代....
> subRegex (mkRegex "FACTOR PLUS FACTOR") "LP FACTOR PLUS FACTOR RP MULT FACTOR" "TERM"
"LP TERM RP MULT FACTOR"
(不要忘记导入Text.Regex)
我不禁注意到你正在做一些看起来更像是无上下文语法生成的东西但是....字符串替换只会让你到目前为止,你可能会发现你需要移动到一个真正的解析器。
答案 1 :(得分:2)
可能不是一种灵活的方式:
mkToken = words
repl :: [String] -> [String]
repl ("FACTOR":"PLUS":"FACTOR":xs) = "TERM" : xs
repl (x:xs) = x : repl xs
repl _ = []
input = "LP FACTOR PLUS FACTOR RP MULT FACTOR"
main = print $ unwords $ repl $ mkToken input