我正在将复数器移植到 Rust,但在使用正则表达式时遇到了一些困难。我无法获取Regex::replace()
正如我所期望的那样,替换编号捕获组的方法。例如,以下显示空字符串:
let re = Regex::new("(m|l)ouse").unwrap();
println!("{}", re.replace("mouse", "$1ice"));
我希望它能打印“mice”,就像在 JavaScript(或 Swift、Python、C# 或 Go)中那样
var re = RegExp("(m|l)ouse")
console.log("mouse".replace(re, "$1ice"))
我应该使用某种方法来代替Regex::replace()
?
检查偏转器板条箱 https://crates.io/crates/Inflector,我看到它提取第一个捕获组,然后将后缀附加到捕获的文本:
if let Some(c) = rule.captures(&non_plural_string) {
if let Some(c) = c.get(1) {
return format!("{}{}", c.as_str(), replace);
}
}
然而,鉴于replace
适用于我使用过正则表达式的所有其他语言,我希望它也适用于 Rust。
正如中提到的文档 https://docs.rs/regex/0.2.2/regex/struct.Regex.html#method.replace:
使用尽可能长的名称。例如。,$1a
查找名为的捕获组1a
而不是索引处的捕获组1
。要对名称进行更精确的控制,请使用大括号,例如${1}a
.
And
有时替换字符串需要使用花括号
描绘捕获组替换和周围的文字文本。
例如,如果我们想用一个单词将两个单词连接在一起
下划线:
let re = Regex::new(r"(?P<first>\w+)\s+(?P<second>\w+)").unwrap();
let result = re.replace("deep fried", "${first}_$second");
assert_eq!(result, "deep_fried");
没有花括号,捕获组名称first_
将被使用,
由于它不存在,它将被替换为空
细绳。
你要re.replace("mouse", "${1}ice")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)