Инверсия набора в регулярных выражениях в Rust
Крышка в самом начале набора после открывающей квадратной скобки инвертирует смысл: совпадает любой один символ, которого нет в списке или диапазоне справа от крышки.
Так удобно пропускать все, кроме цифр, или резать текст до первого запрещенного знака:
use regex::Regex;
fn main() {
let re = Regex::new(r"[^0-9]+").expect("bad pattern");
let line = "12abc34def56";
println!("{}", re.replace_all(line, "|"));
}
Инвертированный набор часто комбинируют с повторением, чтобы съесть хвост до разделителя:
use regex::Regex;
fn main() {
let re = Regex::new(r"[^;]+").expect("bad pattern");
let line = "one;two;three";
for part in re.find_iter(line) {
println!("{}", part.as_str());
}
}
Дана строка:
let line = "name=Ann age=20";
Возьмите куски между "=" и пробелом
через набор все кроме пробела и
выведите их по очереди.
Дана строка:
let line = "tab\there";
Замените подряд идущие символы, не
являющиеся буквой "t", на один
"+" в начале строки.