Исключение в наборе в регулярных выражениях в Rust
Внутри набора можно задать исключение: базовый класс или диапазон минус другой набор в двойных скобках. Так оставляют, например, цифры без нуля.
Запись с двойными скобками читается как символ из левой части, но не из правой:
use regex::Regex;
fn main() {
let re = Regex::new(r"[\d&&[^0]]+").expect("bad pattern");
let line = "105 208 0";
println!("{}", re.replace_all(line, "n"));
}
Тот же прием работает с буквами: из строчных латинских можно убрать гласные и искать только согласные:
use regex::Regex;
fn main() {
let re = Regex::new(r"[a-z&&[^aeiou]]+").expect("bad pattern");
let line = "hello world";
println!("{}", re.replace_all(line, "*"));
}
Дана строка:
let line = "1 12 123 0";
Найдите числа без ведущей цифры ноль
через пересечение набора цифр с инверсией
"0".
Дана строка:
let line = "abc ABC";
Составьте набор строчных букв без
"a" и "b" и замените найденные
куски на "?".