我正在使用此正则表达式处理格式为“1s:1d”、“100:5000”等的简单字符串:
let retention_matcher = regex::Regex::new({r"^(\d+)([smhdy])?:(\d+)([smhdy])?$"}).unwrap();
我知道这个正则表达式应该只匹配一次,所以我想运行正则表达式进行捕获并检查捕获的数量。
let iter = retention_matcher.captures_iter(ts);
let count = iter.count();
println!("iter.count(): {}", count);
let _ : Vec<Option<(u64,u64)>> = iter.map(|regex_match| {
let retval = retention_spec_to_pair(regex_match);
println!("precision_opt: {:?}", retval);
retval
}).collect();
问题是该count()
方法移动了iter
,我不能再使用它了。
src/bin/whisper.rs:147:42: 147:46 error: use of moved value: `iter`
src/bin/whisper.rs:147 let _ : Vec<Option<(u64,u64)>> = iter.map(|regex_match| {
^~~~
src/bin/whisper.rs:144:21: 144:25 note: `iter` moved here because it has type `regex::re::FindCaptures<'_, '_>`, which is non-copyable
src/bin/whisper.rs:144 let count = iter.count();
这对我来说没有意义。该方法是否应该count
只返回一个可复制的usize
值而不是移动iter
?我该如何解决这个问题?