我使用正则表达式包来寻找符合以下正则表达式的某些文本:
我希望能找到所有可能的捕获,并对它们进行迭代:
每个捕获的元素都包括两个值:一个操作和一个数字。例如,输出可能是:
我希望能够遍历它,解析数字并应用操作。 我尝试过:
但是我遇到了这个错误:
lazy_static! {
static ref FIND_STEPS_RE: Regex =
Regex::new(r"my regex").unwrap();
}
我希望能找到所有可能的捕获,并对它们进行迭代:
FIND_STEPS_RE.captures_iter(script_slice)
每个捕获的元素都包括两个值:一个操作和一个数字。例如,输出可能是:
。
[("+", "10"), ("-", "20"), ("*", "2")]
我希望能够遍历它,解析数字并应用操作。 我尝试过:
let e = FIND_STEPS_RE.captures_iter(script_slice)
.fold(0, |sum, value| apply_decoding_step)?;
其中apply_decoding_step
是:
fn apply_decoding_step(sum: i32, capture: regex::Captures<>) -> Result<i32> {
let number = parse_number(&capture[2])?;
match &capture[1] {
"+" => Ok(s + number),
"-" => Ok(s - number),
"*" => Ok(s * number),
"/" => Ok(s / number),
_ => bail!("Unknown step operator"),
}
}
但是我遇到了这个错误:
error[E0271]: type mismatch resolving `<fn(i32, regex::Captures<'_>) -> std::result::Result<i32, Error> {apply_decoding_step} as std::ops::FnOnce<(i32, regex::Captures<'_>)>>::Output == i32`
--> src/main.rs:122:10
|
122 | .fold(seed, apply_decoding_step);
| ^^^^ expected enum `std::result::Result`, found i32
|
= note: expected type `std::result::Result<i32, Error>`
found type `i32`
我猜想这是因为我在尝试将Result
折叠成i32
,但由于我需要解析第二个捕获值并且还需要在match
中使用otherwise
情况,我该如何解决这个问题呢?