Я работаю над извлечением объекта в Пеге. У меня есть требование, чтобы соответствовать номеру полиса, который состоит из 3 частей:
1) При желании 1 будет первым символом в политике. Это необязательно
2) буквенно-цифровой код длины 2, за которым следует произвольно дефис или пробел
3) буквенно-цифровой длины 3
Итак, некоторые примеры форматов:
AB-CDE, AB CDE, ABCDE, 1AB-CDE
23-456, 23 456, 23456, 123456
AB-2B4, AB-B2C, A1-2B4, 2A-34B, 12A-34B, 123-45C и т. Д.
Я сталкиваюсь с проблемой, когда номер политики начинается с 2 или 3 цифр или у него нет пробела или дефиса.
Например, 12А-34В, 123-45С, 23456, 123456.
Я написал ниже скрипт:
PACKAGE uima.ruta.example;
Document{-> RETAINTYPE(SPACE)};
("1")+? ((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,4)};
((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,3)};
Этот код отлично работает для шаблонов с пробелом, например:
AB-CDE, AB CDE, 1AB-CDE. Но не работает, если нет пробела и дефис или шаблон начинаются с 2 или 3 цифр.
Пожалуйста, помогите написать правильный шаблон.
Заранее спасибо.