Извлечение даты в разных форматах из строки в фрейме данных pandas

ниже приведен текст, из которого я хочу получить даты в другом формате.

"Ассистент по продажам @ 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*\)

какие изменения нужно внести.? любые зацепки.? или любой другой эффективный способ получить то же самое ..?

как вы сопоставите шаблон для July-December 2019 и Duration - June 2021? как вы можете видеть, оба они почти одинаковы. если вы хотите избежать несоответствий, вам нужно добавить точный месяц в регулярном выражении

Ramesh 20.01.2023 10:56

Так? regex101.com/r/RI6xCk/1

The fourth bird 20.01.2023 11:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать альтернативы более конкретными и использовать совпадение без учета регистра:

\(\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 20.01.2023 13:08

@Romi Поскольку у нас уже есть список с альтернативами: regex101.com/r/0R5okA/1

The fourth bird 20.01.2023 13:29

Другие вопросы по теме

Регулярное выражение, чтобы получить все селекторы, которые имеют шестнадцатеричный код цвета в своем блоке, но выбирают только один, а не весь цвет
Как написать выражение в построителе выражений в потоке данных ADF
Как настроить путь прокси-сервера nginx для использования статического содержимого определенной папки корзины s3?
Как сделать «противоположный» узор? - Необходимо определить грамматику с жаворонком
Javascript Regex для соответствия только нулевому/четному количеству обратных косых черт в любом месте строки
Как пропустить обратную косую черту, за которой следует целое число?
Использование регулярных выражений для удаления часто используемых суффиксов компаний из списка компаний
Java Regex, CASE_INSENSITIVE, LITERAL плюс целое слово
Python Regex — утверждение lookbehind должно иметь фиксированную ширину
При форматировании JSON с использованием JavaScript я получаю сообщение об ошибке из-за флага "(двойная кавычка) в данных