Якщо брати за основу даний приклад, то, очевидно, слід змінити лише шаблон пошуку в другому рядку — решта має працювати (втім, див. нижче про split). Тобто, в такому варіанті виходить задача не на власне python, а на регулярні вирази (бібліотеки для яких є в більшості мов програмування, актуальних у наш час). У даному прикладі, шаблон відповідає виразові "ім'я оператор_порівняння число" (де оператор_порівняння може бути <, >, <=, >=, <>, =), перед та після оператора можуть стояти необов'якові пробіли. Ще одне: оскільки в шаблонах часто використовується «\» (який також має спеціальне значення і в звичайних рядках), перед рядком з регуляркою зазвичай ставлять літеру r, щоб зберегти «\» неушкодженим: r"^...$"
Квадратні дужки в регулярних виразах мають спеціальне значення, тому, щоб вказати, що це просто квадратна дужка, перед нею ставиться «\»: \[ та \]
Тобто, одному індексу в квадратних дужках відповідає частина шаблону \[[0-9]+\]
Індекси, яких може бути один або декілька: другий індекс (разом з комою перед ним) є необов'язковим. Необов'язковість у регулярках позначається знаком питання, а увесь необов'язковий вираз слід узяти в круглі дужки: (,[0-9]+)?
Додаткових індексів у нас може бути від нуля до двох. Кількість повторів задається у фігурних дужках: (,[0-9]+){0,2}
Або ж можна обійтися самими знаками питання: (,[0-9]+(,[0-9]+)?)? — проте, такий варіант дещо гірший.
Таким чином, увесь 2-й рядок програми матиме такий вигляд:
pattern = re.compile(r"^[a-zA-Z]+\[[0-9]+(,[0-9]+){0,2}\]$")
До речі, вже бачу проблему: якщо вирази відокремлюються комами (рядок 4) , то будь-який вираз з двома чи більше індексами, пропущений через .split(','), буде розбито на декілька виразів, кожен з яких оброблятиметься окремо і, відповідно, вважатиметься невалідним. Тобто, треба думати, як це обійти (в найпростішому випадку, можна не розбивати введений рядок на підрядки — тоді такий вираз вважатиметься валідним, але можливості ввести декілька виразів у рядку не буде).
Якщо регулярки для вас є темною магією (що типово для початківців), то, можливо, краще спробувати розв'язати задачу алгоритмічно, циклічно перебираючи символ за символом — програма значно збільшиться в розмірі, але, принаймні, ви зможете зрозуміти, що ваша програма робить. Також, мабуть, доведеться робити такий перебір, щоб замінити стандартний split, який надто примітивний, щоб зробити те, що вимагається в умовах задачі — вам треба розбити рядок на підрядки, розділені комами, але при цьому коми, що всередині квадратних дужок, обробити не як роздільники, а як звичайні символи.