Определение нескольких форматов даты с помощью Regex - PullRequest
1 голос
/ 18 июня 2020
• 1000 даты, которые находятся между предложениями, оказываются ложными.
df.str.match('([0-9]{0,2})[/-]?([0-9]{0,2})[/-]?([0-9]{2,4})')

Почти все даты будут использоваться? поскольку день, месяц и год встречаются в строке один или несколько раз, день и месяц могут состоять из 1 или 2 символов. Год также может состоять из 2-4 символов.

Некоторые из рабочих тестовых случаев:

03/25/93 Total time of visit (in minutes):

6/18/85 Primary Care Doctor:

Не работает:

sshe plans to move as of 7/8/71 In-Home Services: None

7 on 9/27/75 Audit C Score Current:

Не работает всякий раз, когда даты находятся в середине предложения. Я просто хотел бы узнать, что мне следует улучшить в регулярном выражении, поскольку я все еще новичок в нем. Я также немного запутался в том, где мы размещаем?, До или после, а также {}.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Мне не удалось заставить что-то работать идеально, но вот мое регулярное выражение, если вы хотите начать с него:

(?!\s)([(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?]*[.|,| |-|\/]*\d{1,4}[st|nd|th]?)+

Вы можете протестировать его здесь .

0 голосов
/ 18 июня 2020

Обратите внимание, что df.str.match() использует re.match(), который ищет регулярное выражение в начале строки, тогда как df.str.contains() использует re.search(), который ищет совпадения в любом месте строки.

См. "search () vs match ()" в документации python re для более подробного объяснения.

Pandas документация для дополнительных деталей: pandas .Series.str .match и pandas .Series.str.contains .

Обратите внимание, что я не проверял ваше регулярное выражение подробно, но это должно решить исходную проблему, с которой вы столкнулись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...