#python #regex #date
#python #регулярное выражение #Дата
Вопрос:
(?:d{1,2}[-/])?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)?[,.s]*(?:d{1,2}[-/.)s,]*) (?:d{2,4})(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)?[,.s]*(?:d{1,2}[-/.),]*)
Я пытался извлечь даты из текста из этих ff. format:
- 1 января 2020 г.
- 01 января 2020 г.
- 1 ЯНВАРЯ 2020 г.
- 01 ЯНВАРЯ 2020 г.
- 1 января 2020 г.
- 01 января 2020 г.
- 1 ЯНВАРЯ 2020 г.
- 01 ЯНВАРЯ 2020 г.
- 1 января 2020 года
- 01 января 2020 года
- 1 Января 2020 года
- 01 Января 2020 г.
- 1 ЯНВАРЯ 2020 ГОДА
- 01 ЯНВАРЯ 2020 г.
- 01/01/2020
- 2020/01/01
- 01.01.2020
- 2020.01.01
- 01-01-2020
- 2020-01-01
Вот пример. Проблема заключается в том, когда он пытается извлечь из этого формата 2020 JAN. 1
, 2020 JAN. 01
, 2020 Jan. 01
, 2020-01-01
.
Комментарии:
1. Я бы сделал это не с одним регулярным выражением, а с одним регулярным выражением на образец / формат.
2. Тексты взяты из документа, они извлекаются с помощью tesseract. Форматы дат могут быть любыми из следующих, упомянутых выше. Как бы я сделал это по-вашему? Спасибо
Ответ №1:
Вы можете использовать
pattern = r"""(?ix)
b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(?:Nov|Dec)(?:ember)?) [s.]* (?:0?[1-9]|[12][0-9]|3[01]) [s,.]* (?:19|20)(?:d{2})? # Jan 01 2000
|
(?<!d)(?:19|20)(?:d{2})? [s,.]* (?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(?:Nov|Dec)(?:ember)?) [s.]* (?:0?[1-9]|[12][0-9]|3[01]) # 2000 Jan 01
|
(?<!d)
(?:
(?:0?[1-9]|1[012])[-/.]?(?:0?[1-9]|[12][0-9]|3[01])[-/.]?(?:19|20)dd # MM/dd/yyyy
|
(?:19|20)dd[-/.]?(?:0?[1-9]|1[012])[-/.]?(?:0?[1-9]|[12][0-9]|3[01]) # yyyy/MM/dd
)
(?!d)"""
Смотрите демонстрацию регулярных выражений
Флаг i
модификатора включает сопоставление без учета регистра и x
включает ПОДРОБНЫЙ режим.
Комментарии:
1. Он соответствует
FEB-200
и02 February 2
2. @MattMateo Теперь лучше? Пожалуйста, настройте шаблон по своему усмотрению, мы не видим все ваши данные.