Чего я пытаюсь достичь : я хочу сопоставить введенное пользователем предложение с моими шаблонами и посмотреть, какой шаблон подходит лучше (как можно больше групп в шаблоне).
Регулярное выражение, которое я строю для решения примера :
^(\bMyCompany1\b)?(?:.+)?\s(\bestablishes\b)?(?:.+)?\s(\bAnotherCompany\b)?(?:.+)?$
Примеры предложений :
'MyCompany1 establishes AnotherCompany'
-соответствует всем 3 группам. ОК 'MyCompany1 establ AnotherCompany'
- соответствует первой и последней группе. игнорирует среднюю опечатку. тоже ок 'MyCompany1 establishes AnotherCompany '
- пробел в конце. не могу определить 2 и 3 группы. Я не понимаю, почему 'MyCompany1 establishes AnotherCompany'
- дополнительные пробелы после слова «устанавливает». По какой-то причине больше не обнаруживает 2-ю группу
Это регулярное выражение является лишь примером одного шаблона. У меня будет 1 регулярное выражение (построить динамически) для каждого шаблона. Как и «Пользователь1 отправил запрос пользователю2», «Компания1 одолжила компании2 $ 111». Моя идея состоит в том, чтобы определить каждую часть шаблона и посмотреть, сколько частей я сопоставил. Например, в моем примере: - я ожидаю, что какое-то название компании из списка (MyCompany или MyCompany1) или группа без захвата игнорирует остальные (возможно, пользователь сделал опечатку или просто печатает и еще не закончил) - я ожидаю такой же порядок группчтобы быть там
Можете ли вы объяснить, что я делаю неправильно в моем Regex? Правильно ли достичь этого с помощью Regex?