gpt4 book ai didi

regex - 在Rust中,当Rep包含一些变量时,如何做Regex的replace_all(regex,Rep)?

转载 作者:行者123 更新时间:2023-12-03 11:42:23 26 4
gpt4 key购买 nike

这是关于Rust,regex::Regex。
对于以下代码,我尝试输出输入单词,然后输出随机字符串。
Playground
第一个函数可以编译,但是我不想要它,因为它不使用随机字符串。
第二个函数产生编译器错误。
您能给我如何修正我的代码吗?

use regex::Regex;
fn main() {
let cd="rust";
ok_but_i_dont_want_it(cd);
compiler_err(cd);
}
fn ok_but_i_dont_want_it(cd:&str){
let random_str="j93bg8";
let reg_idnt=Regex::new(r"(?P<ident>[_A-Za-z]{1,}[_A-Za-z0-9]{0,})").unwrap();
let cd=reg_idnt.replace_all(" rust ","${ident}_{}");
println!("{}",cd);

}
fn compiler_err(cd:&str){

let random_str="j93bg8";
let reg_idnt=Regex::new(r"(?P<ident>[_A-Za-z]{1,}[_A-Za-z0-9]{0,})").unwrap();
let cd=reg_idnt.replace_all(cd,format!("${ident}_{}",random_str));
println!("{}",cd);
}
error: there is no argument named `ident`
--> src/main.rs:18:47
|
18 | let cd=reg_idnt.replace_all(cd,format!("${ident}_{}",random_str));
| ^^^^^^^

error[E0277]: expected a `FnMut<(&regex::Captures<'_>,)>` closure, found `String`

最佳答案

如果您不希望format!处理{ident},则可以通过将花括号加倍来对其进行escape:

reg_idnt.replace_all(cd, format!("${{ident}}_{}", random_str));
这将导致 format!忽略它,结果将是 "{ident}_j93bg8",它被传递给 replace_all

您缺少 .as_str()来将 String中的 format!作为 &str传递给 Replacer
format!("${{ident}}_{}", random_str).as_str()
看到它在 playground上运行

关于regex - 在Rust中,当Rep包含一些变量时,如何做Regex的replace_all(regex,Rep)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65855968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com