如何在Rust中以惯用方式替换特定字符?

时间:2016-01-05 07:11:37

标签: regex rust

所以我有字符串" Hello World!"并想要取代"!"用"?"所以新的字符串是" Hello World?"

在Ruby中,我们可以使用gsub方法轻松完成此任务:

"Hello World!".gsub("!", "?")

如何在Rust中以惯用方式执行此操作?

2 个答案:

答案 0 :(得分:23)

您可以使用std::str::replace替换另一个字符串中出现的所有字符串:

let result = str::replace("Hello World!", "!", "?");
// Equivalently
result = "Hello World!".replace("!", "?");
println!("{}", result); // => "Hello World?"

对于更复杂的案例,您可以使用regex::Regex::replace_all中的regex

use regex::Regex;
let re = Regex::new(r"[A-Za-z]").unwrap();
let result = re.replace_all("Hello World!", "x");
println!("{}", result); // => "xxxxx xxxxx!"

答案 1 :(得分:15)

您也可以使用迭代器和match表达式:

let s:String = "Hello, world!".chars()
    .map(|x| match x { 
        '!' => '?', 
        'A'...'Z' => 'X', 
        'a'...'z' => 'x',
        _ => x}
    ).collect();
println!("{}", s);// Xxxxx, xxxxx?