Как удалить значения мусора из дат, извлеченных с помощью регулярных выражений в Python
Цель: извлечь даты из медицинских карт (хранится в серии "Панды", даты представлены во всех возможных форматах)
Для числовых дат я использовал:
str.extractall(r'((?:\b\d{1,2}[/]){1,2}(?:(?:\d{2}\b)|\b\d{4}\b))')
Проблема:
Введите текст1:
"(5/11/85) Crt-1.96, BUN-26; AST/ALT-16/22; Independent
Выход 1: 5/11/85
(по желанию), но также: 16/22
Введите текст 2:
[text...] (7/11/77) CBC: 4.9/36/308 Pertinent [...]:
Выход2: 7/11/77
(как хотелось бы) но также 9/36
Особенно сложен второй случай, потому что преобразование его в дату возвращается: сентябрь 2036 года, поэтому его нельзя выбрать таким образом.
[^-]
делает это еще хуже.
Даты везде в тексте, например:
[...] has also taken diet pills (last episode in Feb 1993) but [...]
Февраль 1993 года и т. Д. Не было проблемой.
2 ответа
Вы должны указать, что означает "все форматы". В вашем примере вы просто показываете 1 формат. Может ли присутствовать "JAN-02-2016" "02.02.2016" "01.02.2016"? Европейские и американские форматы времени? так далее?
В вашем примере это выглядит так, будто даты всегда находятся в начале строки и заключены в скобки, что делает их довольно простыми.
^ ((\ D +/\ D +)).| ^ ((\ d +/\ d + / d +)).
Основное правило при работе с регулярными выражениями: знать свои данные. Вы должны составить столько точных регулярных выражений, сколько сможете.
Тогда я бы предложил вам разобрать такие грубые даты в реальные, полноценные объекты дат. Он служит двум основным целям: во-первых, вы отфильтровываете отрицательные совпадения с регулярными выражениями; во-вторых, теперь вы можете справляться со своими датами гораздо более удобным и удобным способом, используя методы объекта date вместо сравнения только текстовых строк. Например, вы можете получить доступ к дате, месяцу или году, сравнить их с желаемым значением и отфильтровать даты на основе такого сравнения.
Для разбора дат я бы рекомендовал вам использовать одну из сложных библиотек разбора дат, такую как dateutil
или же dateparser
, который обрабатывает много сложных деталей для вас, бесплатно.