[*]целевой квадрат должен быть указан в полную длину (координаты a-h и 1-8 на доске)Исключением является рокировка, которая отмечается в традиционной записи рокировки (
Код: Выделить всё
O-O
[*]Заполните слова типа take или go to. необязательно.
[*]
Код: Выделить всё
on
[*]Если фигуры или слова-заполнители выписаны (
Код: Выделить всё
Rook
(
Код: Выделить всё
Nf3
[*]Если фрагмент сокращен, то это необходимо быть заглавной буквой, чтобы отличить ее от координат доски (
Код: Выделить всё
B
[*]Если заданы обе координаты атакующей фигуры (
Код: Выделить всё
e2e4
Код: Выделить всё
e4
[*]Шах и мат не являются обязательными и также должны быть буферизованы пробелами, если они не сокращены. (да Лd8+, да Лd8 проверка, да Лd8 +, нет Лd8проверка).
Пример входных данных:
Код: Выделить всё
Knight on g1 goes to f3
b captures a8 =q checkmate
Ra1e1+
rook 2 to f8 with check
O-O-O#
Код: Выделить всё
[Knight ][on ][g1][ to ][f3][ with check] -> 'Knight to f3' not possible!
[Knight][ on][ g1][ to ][f3][ with check] -> 'Ng1f3' not possible!
[Knight][ on ][g1][ to ][f3][ with check] -> 'Knight g1 to f3' not possible!
Код: Выделить всё
r'(Knight|knight|N)?( on )?[a-h]?[1-8]?( to | takes | captures )?[a-h][1-8](Q|=Q| queen)?( check| checkmate)?'
Я уверен, что есть лучший способ сделать это...
Подробнее здесь: https://stackoverflow.com/questions/791 ... ve-parsing