ниже приведен текст, из которого я хочу получить даты в другом формате.
"Ассистент по продажам @ DFS Продолжительность - июнь 2021 г. - 2023 г. В настоящее время работает в XYZ В рамках этой должности от меня ожидают достижения целей продаж, которые я на данный момент проблем с доставкой нет. Должность/Учреждение - Штукатур @ XX Штукатур Продолжительность - сентябрь 2016 г. - ноябрь 2016 г. A Job Роль/учреждение - Консультант по работе с клиентами @ AA Продолжительность - (2015 – 2016) Вакансия Должность/Учреждение - Оператор склада @ xyz Продолжительность - 03/2014 до 08/2015 На складе xyz Должность/Учреждение - Аэропорт Terminal Assistant @ port Продолжительность - 01/2012 - 06/2013 Работа на аэропорт . Должность/учреждение — подмастерье по напольным покрытиям @ YY Floors Продолжительность – с декабря 2010 г. по апрель 2012 г. (a) (03.12.2020) – (11.02.2021) даты в разных форматах @TEST Duration - (декабрь-март 2022 г.) и это тест @BLA Продолжительность - (июль-декабрь 2019 г.) - это тест попытка получить даты с форматами diff - 22/05 - 2023. @ Продолжительность штукатура - 21.10 - 22.05 16-17, другие начинаются с 31 с сентября 2022 г. по 01 января 2023 г. ближе к концу начинается с июля 2022 - январь 2023 .
Это логика регулярного выражения отметьте здесь, чтобы увидеть шаблон регулярного выражения, который соответствует большинству форматов даты, но по-прежнему пропускает дату с 31 сентября 2022 года по 01 января 2023 года в этом формате. Также текущий шаблон извлекает 16-17, что не требуется.
\(?(?:\b[A-Za-z]{3,9}\s*)?(?:\d\d?/){0,2}[12]\d(?:\d{2})?\)?\s*(?:–|-|[Tt][Oo])\s*\(?(?:[A-Za-z]{3,9}\s*)?(?:\d\d?/){0,2}[12]\d(?:\d{2})?\)?|\(\s*[A-Za-z]{3,9}\s*[--]\s*[A-Za-z]{3,9}\s*[12]\d{3}\s*\)
какие изменения нужно внести.? любые зацепки.? или любой другой эффективный способ получить то же самое ..?






Вы можете сделать альтернативы более конкретными и использовать совпадение без учета регистра:
\(\d\d?/\d\d?/\d{4}\)\s*[-–]\s*\(\d\d?/\d\d?/\d{4}\)|\((?:[A-Za-z]{3,9}|\d{4})\s*[-–]\s*(?:[A-Za-z]{3,9})?\s*\d{4}\)|\b\d\d?\s+[A-Za-z]{3,9}\s*[-–]\s*\d{4}\s+to\s+\d\d?\s+[A-Za-z]{3,9}\s+\d{4}\b|\b[A-Za-z]{3,9}\s+\d{4}\s*(?:[-–]|to)(?:\s*[A-Za-z]{3,9})?\s+\d{4}|\b\d\d?/(?:\d{4}|\d\d?)\s+(?:to|[-–])\s+(?:\d\d?/)?(?:\d{4}|\d\d?)\b
Это длинный шаблон, но это 5 альтернатив с описанием.
\(\d\d?/\d\d?/\d{4}\)\s*[-–]\s*\(\d\d?/\d\d?/\d{4}\) Сопоставьте (...)-(...) с цифрами и / в качестве разделителя| Или\((?:[A-Za-z]{3,9}|\d{4})\s*[-–]\s*(?:[A-Za-z]{3,9})?\s*\d{4}\) Сопоставьте (...)-(...) с начальными символами az или 4 цифрами, затем - за которыми следуют необязательные символы az и затем 4 цифры| Или\b\d\d?\s+[A-Za-z]{3,9}\s*[-–]\s*\d{4}\s+to\s+\d\d?\s+[A-Za-z]{3,9}\s+\d{4}\b Сопоставьте цифры и символы от а до я с - и to| Или\b[A-Za-z]{3,9}\s+\d{4}\s*(?:[-–]|to)(?:\s*[A-Za-z]{3,9})?\s+\d{4} Сопоставьте символы от а до я с 4 цифрами, to или - и необязательными символами, за которыми следуют 4 цифры| Или\b\d\d?/(?:\d{4}|\d\d?)\s+(?:to|[-–])\s+(?:\d\d?/)?(?:\d{4}|\d\d?)\b Сопоставьте 1 или 2 цифры, затем / и 1,2 или 4 цифры. Затем сопоставьте to или - и снова 1-2 цифры / и 1,2 или 4 цифрыПосмотрите демонстрацию регулярных выражений.
респект..!! но он не обнаруживает такой формат 2014-2015 годов, т.е. без скобок. какие изменения нужно внести regex101.com/r/HgAMX9/1
@Romi Поскольку у нас уже есть список с альтернативами: regex101.com/r/0R5okA/1
как вы сопоставите шаблон для
July-December 2019иDuration - June 2021? как вы можете видеть, оба они почти одинаковы. если вы хотите избежать несоответствий, вам нужно добавить точный месяц в регулярном выражении