用相应的替换替换多个子字符串

时间:2012-07-23 20:32:55

标签: haskell replace

我有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)?

1 个答案:

答案 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