【发布时间】:2021-06-28 00:52:57
【问题描述】:
我是 Rust 的新手,我很难理解所有权概念。我有一个字符串,其中包含具有特定模式的子字符串,例如“alice [bob] charlie [dave]”,并且我正在尝试获取看起来像(“john”,“dave”)的字符串向量)。我的第一次尝试是使用带有非捕获组的正则表达式,但我无法让它发挥作用,因为我不太了解 rust:
let re = Regex::new(r"(?:\[)([a-zA-Z]+)(?:])").unwrap();
let mut answer: Vec<&str> = re.captures_iter((&text)).map(|capGroup| &*String::from(&capGroup[1])).collect();
但我可以像这样收集它们:
let re = Regex::new(r"\[[a-zA-Z0-9_]+]").unwrap();
let mut answer: Vec<&str> = re.find_iter((&text)).map(|mtc| mtc.as_str()).collect();
这个问题是它给我留下了(“[bob]”,“[dave]”),而且我在修剪字符串的第一个和最后几个字符方面也没有成功。事实上,我什至不明白这里的迭代是如何工作的,因为当我尝试这样做时:
let mut it = answer.iter();
for name in &mut it{
...
我最终得到的名称是 &&str 类型,而不是我预期的 &str。
所以我的问题是:
- 如何以惯用的方式在第一个示例中尝试使用 rust 中的捕获组?我觉得我已经接近将某些东西应用于所有捕获并收集到 vec 中的标记,但有些东西正在逃避我。
- 给定
Vec<&str>,如何修改其中的字符串?我在这里缺少什么? - 当我这样做时,为什么我的迭代项类型为
&&str? - 有没有更好的方法来实现这一点?
【问题讨论】: