这里是 Rust 新手,出于好奇,我试图遵循文档中的一些练习,想知道实现以下目标的“最佳”方法是什么:
给定正则表达式列表,我怎样才能:
我正在尝试的示例代码:
use regex::Regex;
let pattern1: Regex = Regex::new(r"^add|Add ([a-zA-Z]*) to ([a-zA-Z]*)")
let pattern2: Regex = Regex::new(r"^list|List all$")
let text = String::from("add employee to company");
match text {
if pattern1.is_match(&text) => do_something_with(<captured_group>),
if pattern2.is_match(&text) => do_something_else_with(),
_ => ()
}
我期望这段代码可以以某种方式调用
do_something_with
并匹配模式,并能够提取 employee
和 company
。我也许可以在函数中调用 captures
来获取正则表达式,但我会解析正则表达式两次
Regex::captures
会返回None
,因此您无需使用is_match
进行检查。正如 cafce25 评论的那样,您可以简单地在 if let
上使用 pattern.captures(&text)
,如下所示:
use regex::Regex;
fn main() {
let pattern1: Regex = Regex::new(r"^add|Add ([a-zA-Z]*) to ([a-zA-Z]*)").unwrap();
let pattern2: Regex = Regex::new(r"^list|List all$").unwrap();
let text = String::from("add employee to company");
if let Some(captures) = pattern1.captures(&text) {
// do_something_with(captures);
} else if let Some(captures) = pattern2.captures(&text) {
// do_something_else_with(captures);
}
}
您也可以在两个 match
上使用嵌套的
pattern.captures(&text)
,但这会不太简洁。