我有String
,其中包含${...}
形式的多个标记(其中...
可以是任何不包含}
字符的字符串),例如foo ${bar} baz ${qux}
。
我想替换这些标签,但要做到这一点,我需要一个以下形式的函数:
replace :: [String] -> [String] -> String -> String
-- tags replacements target result
replace ["${bar}", "${qux}"] ["abc", "def"] "foo ${bar} baz ${qux}" == "foo abc baz def"
(当给定数组作为参数时,这类似于PHP的str_replace
函数。)
我在任何包中都找不到这样的替换功能。是否有这样的功能,如果不存在我将如何写它(指向正确的方向就足够了;我正在学习Haskell)?
答案 0 :(得分:4)
作为一个单行:
Prelude Data.Text> Prelude.foldr (uncurry Data.Text.replace) "foo ${bar} baz ${qux}" $ Prelude.zip ["${bar}", "${qux}"] ["abc", "def"]
"foo abc baz def"
换句话说:
replace as bs x = Prelude.foldr (uncurry Data.Text.replace) x $ Prelude.zip as bs