Именованный карман в регулярных выражениях в Rust
Внутри круглых скобок имя пишут через запись (?P<name>...). Такой карман достают не по номеру, а по выбранному имени в результате поиска.
Разберем ключ и значение в простой записи:
use regex::Regex;
fn main() {
let re = Regex::new(r"(?P<key>\w+)=(?P<val>\d+)").expect("bad pattern");
let line = "id=7 mode=2";
if let Some(cap) = re.captures(line) {
if let Some(k) = cap.name("key") {
println!("{}", k.as_str());
}
if let Some(v) = cap.name("val") {
println!("{}", v.as_str());
}
}
}
Имена удобны, когда групп несколько и номера легко перепутать после правки шаблона:
use regex::Regex;
fn main() {
let re = Regex::new(r"(?P<h>\d{2}):(?P<m>\d{2})").expect("bad pattern");
let line = "time 10:30";
if let Some(cap) = re.captures(line) {
if let Some(h) = cap.name("h") {
if let Some(m) = cap.name("m") {
println!("{}:{}", h.as_str(), m.as_str());
}
}
}
}
Дана строка:
let line = "email:ann@mail.com";
Выделите локальную часть до "@"
в именованный карман и выведите ее.
Дана строка:
let line = "v1.2.3";
Сохраните три числа версии в карманы
"major", "minor" и "patch"
и выведите их через точку.