From 6c71bc19f597d209ab4883efc24883cebb5169af Mon Sep 17 00:00:00 2001 From: n08i40k Date: Thu, 25 Sep 2025 02:50:43 +0400 Subject: [PATCH] chore(parser): fix crash caused by another mistype in schedule --- .../provider-engels-polytechnic/src/parser/mod.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/providers/provider-engels-polytechnic/src/parser/mod.rs b/providers/provider-engels-polytechnic/src/parser/mod.rs index 463893a..4c9d8fc 100644 --- a/providers/provider-engels-polytechnic/src/parser/mod.rs +++ b/providers/provider-engels-polytechnic/src/parser/mod.rs @@ -448,7 +448,7 @@ fn parse_name_and_subgroups(text: &str) -> Result { static NAMES_REGEX: LazyLock = LazyLock::new(|| { Regex::new( - r"(?:[А-Я][а-я]+\s?(?:[А-Я][\s.]*){2}(?:\(\s*\d\s*[а-я\s]+\))?(?:[\s,]+)?){1,2}+[\s.,]*", + r"(?:[А-Я][а-я]+\s?(?:[А-Я][\s.]*){2}(?:\(?\s*\d\s*[а-я\s]+\)?)?(?:[\s,.]+)?){1,2}+[\s.,]*", ) .unwrap() }); @@ -457,7 +457,7 @@ fn parse_name_and_subgroups(text: &str) -> Result { static CLEAN_RE: LazyLock = LazyLock::new(|| Regex::new(r"[\s\n\t]+").unwrap()); let text = CLEAN_RE - .replace(&text.replace([' ', '\t', '\n'], " "), " ") + .replace(&text.replace([' ', '\t', '\n'], " ").replace(",", ""), " ") .to_string(); let (lesson_name, subgroups, lesson_type) = match NAMES_REGEX.captures(&text) { @@ -471,13 +471,15 @@ fn parse_name_and_subgroups(text: &str) -> Result { let mut subgroups: [Option; 2] = [None, None]; for name in src.split(',') { - let open_bracket_index = name.find('('); + let digit_index = name.find(|c: char| c.is_ascii_digit()); - let number: u8 = open_bracket_index - .map_or(0, |index| name[(index + 1)..(index + 2)].parse().unwrap()); + let number: u8 = + digit_index.map_or(0, |index| name[(index)..(index + 1)].parse().unwrap()); let teacher_name = { - let name_end = open_bracket_index.unwrap_or(name.len()); + let name_end = name + .find(|c: char| !c.is_alphabetic()) + .unwrap_or(name.len()); // Я ебал. Как же я долго до этого доходил. format!(